Построитель запросов QueryBuilder

Модератор
#
Re: Построитель запросов QueryBuilder
brokerUA писал(а):
Переменную `2013-05-01 00:00:00` — понимает как колонку, а 'start_datetime' и 'end_datetime' как входящие текстовые значения. Если расставить кавычки наоборот, в виде:

QB делает именно то, что Вы написали. У HAVING первым аргументом идет имя поля, в аргументах идут значения. Вам нужно использовать Core_QueryBuilder::expression(), тогда система не будет обрабатывать аргумент.
    ->having(Core_QueryBuilder::expression($dateFrom), 'BETWEEN', array(Core_QueryBuilder::expression('shop_items.start_datetime'), Core_QueryBuilder::expression('shop_items.end_datetime')))
и далее по аналогии.
#
Re: Re: Построитель запросов QueryBuilder
Пробовал такие варианты:
->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().
Модератор
#
Re: Построитель запросов QueryBuilder
brokerUA,
выход не совсем удачный. Напишите в поддержку с доступом ЦА/ФТП + ссылкой на тему
#
Re: Построитель запросов QueryBuilder
Подскажите как можно вывести товары из подгрупп текущей группы не исказив при этом дерево групп?
Сделал так:

$Shop_Controller_Show->shopItems()->queryBuilder()
            ->open()
            ->where('shop_items.shop_group_id', 'IN', $cg)
            ->setOr()
            ->where('shop_items.shop_group_id', '=', $Shop_Controller_Show->group)
            ->close()
            ->setAnd()
        ;
        $Shop_Controller_Show->group = false;
То есть задал поиск по подгруппам и текущей группе, потом убил текущую группу. С товарами стало все в порядке, но вот дерево категорий стало строиться от корня, что неприемлемо ввиду большого объема лишней информации, в полупустом магазине объект имеет 2000 строк в xml, а что будет в реально наполненном я даже боюсь предположить. Убрать стовсем вывод групп тоже не выход, они мне нужны как и товары.
Модератор
#
Re: Построитель запросов QueryBuilder
Arkadiy,
тем про контроллеры рядом http://www.hostcms.ru/forums/2/7122/
#
Re: Построитель запросов QueryBuilder
Спасибо, помогло.
#
Re: Построитель запросов QueryBuilder
Подскажите как мне полученный массив


$oCore_QueryBuilder_Select = Core_QueryBuilder::select()
                   ->from('test')
               ->where('user_id', '=', $id);
  
        $aRows = $oCore_QueryBuilder_Select->execute()->asAssoc()->result();


Отправить в XML
Модератор
#
Re: Построитель запросов QueryBuilder
difight,
массив никак, только объекты, порожденные от Core_Entity. Используйте ORM, получайте объекты, добавляйте композицией контроллеру или другому объекту.
#
Re: Построитель запросов QueryBuilder
HostCMS,

Здравствуйте. Не могли бы Вы привести пример кода, реализующего подобное
Модератор
#
Re: Построитель запросов QueryBuilder
ased,
подобное? Вы о чем говорите, не вижу Вашего предыдущего запроса?
Авторизация