Хочу сделать отборку товара по первой букве в названии, объекту магазина приделываю queryBuilder
$Shop_Controller_Show->shopItems()->queryBuilder()
->where('UCASE(LEFT(shop_items.name, 1))', '=', $liter);
На выходе получаю ошибку формирования запроса. Эта строка в запросе выглядит так:
UCASE(LEFT(`shop_items`.`name, 1`)) = 'Г'
Из этого отрывка видно что билдет неправильно расставил косые кавычки, правильно будет так:
UCASE(LEFT(`shop_items`.`name`, 1)) = 'Г'
В этом случае запрос выполняется правильно.
Как заставить билдер правильно расставить косые кавычки?
Версия 6.0.4 корпорация.
Весь запрос для справки
SELECT SQL_CALC_FOUND_ROWS `shop_items`.* FROM `shop_items` WHERE `shop_items`.`shop_id` = '3' AND `shop_items`.`active` = 1 AND ( `shop_items`.`start_datetime` < '2012-11-10 13:18:23' OR `shop_items`.`start_datetime` = '0000-00-00 00:00:00' ) AND ( `shop_items`.`end_datetime` > '2012-11-10 13:18:23' OR `shop_items`.`end_datetime` = '0000-00-00 00:00:00' ) AND `shop_items`.`siteuser_group_id` IN (0, -1) AND `shop_items`.`modification_id` = 0 AND UCASE(LEFT(`shop_items`.`name, 1`)) = 'Г' AND `shop_items`.`deleted` = 0 ORDER BY `shop_items`.`datetime` ASC
В селекте то-же самое отрабатывает нормально. Рабочий запрос:
$result = Core_QueryBuilder::select('UCASE(LEFT(`name`, 1)) as alpha')
->distinct()
->from('shop_items')
->where('active', '=', 1)
->where('deleted', '=', 0)
->where('shop_id', '=', (int)$shop)
->execute()
->asAssoc()
->result();