критерия и построение запроса

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Аватара пользователя
b10s
Сообщения: 72
Зарегистрирован: 2013.02.02, 18:22
Откуда: Краснодар-Сочи-Тимашевск
Контактная информация:

критерия и построение запроса

Сообщение b10s »

Здравствуйте,

я хочу построить запрос - фильтр, который на SQL будет выглядеть так:

Код: Выделить всё

select * from t1 where ( status=1 or status=2 or ... or status=n ) and  ( type=1 or type=2 or ... or type=n )
Как можно создать объект типа CDbCriteria соответствующий такому запросу?

Т.е. я хочу делать так

Код: Выделить всё

$filter = new CDbCriteria();
//как-нить открыть скобку
$filter->AddCondition='status=1';
$filter->AddCondition='status=2';
//как-нить закрыть скобку, добавить AND
//как-нить открыть скобку
$filter->AddCondition='type=1';
$filter->AddCondition='type=2';
//как-нить закрыть скобку  
вот такой алгоритм добавления мне нужен или что-то попроще, чтобы составить две критерии и объеденить их через AND - так даже будет логичнее.

Спасибо!
Аватара пользователя
flashimage
Сообщения: 1517
Зарегистрирован: 2011.01.23, 12:43

Re: критерия и построение запроса

Сообщение flashimage »

Код: Выделить всё

$filter->AddCondition('status=1 or status=2 or ... or status=n');
$filter->AddCondition('type=1 or type=2 or ... or type=n');
Все остальное сделает activeRecord. Они по умолчанию объединяются через AND, если хотите OR надо писать $filter->AddCondition('blablabla', 'OR');
Бранчи это гомеоморфические эндофункторы, которые мапятся на субманифолды пространства Гилберта.
Аватара пользователя
b10s
Сообщения: 72
Зарегистрирован: 2013.02.02, 18:22
Откуда: Краснодар-Сочи-Тимашевск
Контактная информация:

Re: критерия и построение запроса

Сообщение b10s »

спасибо!
я справился вот так:

Код: Выделить всё

                
        $statusFilter = new CDbCriteria();
        $statusFilter->compare('status', $status);

        $typeFilter = new CDbCriteria();
        $typeFilter->compare('type', $type);

        $statusFilter->mergeWith($typeFilter);
        $statusFilter->order='id desc';
где $status и $type массивы значений этих фильтров, которые формируются динамически через array_push().
Ответить