Пример использования CDbCriteria (методы)

В предыдущие заметки, я рассмотрел использование атрибутов класса CDbCriteria. Теперь рассмотрим методы этого класса. Почти все методы последним параметром принимают строку с помощью которой будет происходить конкатенация данного условия с остальной частью запроса, по умолчанию AND. Все будет рассмотрено на примерах.
Понеслась…

// создаем экземпляр класса CDbCriteria
$criteria = new CDbCriteria;
// установим некое начальное условие
$criteria->condition = 'user_id = :userId';
// формирует условие AND price BETWEEN 500 AND 1500
$criteria->addBetweenCondition('price', '500', '1500');
// формирует условие AND (date_create = '2010-12-23' OR status = 'success')
$criteria->addColumnCondition(array('date_create'=>'2010-12-23', 'status'=>'success'), 'OR')
// принимает первым параметром строку или массив строк - условий
// если передан массив строк, то конкатенация будет происходить через 2ой параметр,
// так же как и с остальными условиями, по умолчанию AND
// формирует условие AND (count_viewed <= :countViewed OR count_viewed = '26')
$criteria->addCondition("count_viewed <= :countViewed OR count_viewed = '26'");
// первый параметр, название колонки или валидный SQL
// второй параметр, массив значения
// формирует запрос OR (id IN ('3', '13', '24', '53', '69'))
$criteria->addInCondition('id', array('3', '13', '24', '53', '69'), 'OR');
// тоже самое, только NOT IN
// формирует запрос AND (id NOT IN ('3', '13', '24', '53', '69'))
$criteria->addNotInCondition('id', array('3', '13', '24', '53', '69'));
// первый параметр, название колонки или валидный SQL
// второй параметр, строка поиска, интерпретация зависит от следующих параметров
// третий параметр, экранирование строки поиска. По умолчанию true и строка поиска
// будет обрамлена % на концах. Если false, то строка поиска будет вставлена как есть
// четвертый параметр, строка для конкатенации с другими условиями
// пятый параметр, строка, тип LIKE(по умолчанию), NOT LIKE
$criteria->addSearchCondition('title', 'Some text', true, 'NOT LIKE');
// очень хороший метод, позволяет мержить несколько экземпляров класс CDbCriteria
// первым параметром принимает экземпляр класса с котором надо смержить текущий
// второй параметр, строка для конкатенации условий по умолчанию AND
$criteria1 = new CDbCriteria();
$criteria1->condition = 'date_update < ' . new CDbExpresssion('NOW()');
$criteria->mergeWith($criteria1, 'OR');
// ну и теперь надо исполнить все это))
$count = OrderLog::model()->count($criteria);

Есть еще метод toArray(), который возвращает массив из объекта.
Вот и все, не чего сложно, но надо знать про существование этого хорошего класса, про его методы и атрибуты, которые позволяет облегчить жизнь при работе с ActiveRecord.

2 Responses

  1. MobiAppSystems 26.11.2015 / 17:15

    C $criteria->condition обязательно начинать условие выборки или можно начинать с $criteria->addCondition или $criteria->compare? Есть ли принципиальная разница?

    • SpiLLeR 28.11.2015 / 23:27

      Нет, начинать можно с чего необходимо.

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *