Пробовал такие варианты:
->having(Core_QueryBuilder::expression($dateFrom), 'BETWEEN', array(Core_QueryBuilder::expression('shop_items.start_datetime'), Core_QueryBuilder::expression('shop_items.end_datetime')))
->having(Core_QueryBuilder::expression("'".$dateFrom."'"), 'BETWEEN', array(Core_QueryBuilder::expression('`shop_items`.`start_datetime`'), Core_QueryBuilder::expression('`shop_items`.`end_datetime`')))
выдает ошибки:
Exception: Wrong argument type (expected String) for quote()
29 modules\core\exception.php
292 modules\core\database.php
177 modules\core\querybuilder\statement.php
279 modules\core\querybuilder\selection.php
198 modules\core\querybuilder\selection.php
508 modules\core\querybuilder\select.php
461 modules\core\orm.php
375 modules\core\entity.php
510 hostcmsfiles\lib\lib_43\lib_43.php -- это строка $aModifications = $oModifications->findAll();
268 modules\lib\model.php
100 modules\core\page.php
18 templates\template11\template.htm
83 modules\template\model.php
100 modules\core\page.php
102 templates\template1\template.htm
83 modules\template\model.php
100 modules\core\page.php
363 modules\core\command\controller\default.php
188 modules\core\router\route.php
205 index.php
Как я понял проблема в передаче аргументов массиву, при запросе в БД он любые значения вносит в одинарные кавычки, а нужно поставить имя колонки
`shop_items`.`start_datetime`
Нашел выход таким способом:
$oModifications
->queryBuilder()
->where('shop_items.modification_id', '!=', '0')
->where(Core_QueryBuilder::expression("`shop_items`.`showed` = 0 HAVING ( '".$dateFrom."' BETWEEN `shop_items`.`start_datetime` AND `shop_items`.`end_datetime` OR '".$dateTo."' BETWEEN `shop_items`.`start_datetime` AND `shop_items`.`end_datetime` ) AND `shop_items`.`deleted`"), '=', '0');
Спасибо за подсказку по Core_QueryBuilder::expression().