Пример использования CDbCriteria

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

// создаем экземпляр  класса CDbCriteria
$criteria = new CDbCriteria;
// указываем алиас таблицы
$criteria->alias = 'user';
// условие то, что относится к WHERE
// можно использовать плейсхолдеры
$criteria->condition = 'id = :userId AND date_create < NOW()';
// если мы хотим отфильтровать дубликаты, 
// то distinct устанавливаем в значение true
// по умолчанию значение false;
$criteria->distinct = true;
// указываем поля по которым делать группировку, GROUP BY
$criteria->group = 'date_update';
// значения HAVING
$criteria->having = 'MAX(salary) > 10000';
// указываем индекс результирующего массива, полезная фишка, появилась с версии 1.1.5
// по умолчанию значение NULL и будут численный индекс начиная с 0
$criteria->index = 'full_name';
// указываем как приджойнить другую(ие) таблицу(ы)
// джойним некую таблицу 
$criteria->join = 'LEFT JOIN `profile` ON `user`.`id` = `profile`.`user_id`';
// максимальное количество записей которое может вернуть запрос
// если меньше 0, вернет все записи
$criteria->limit = '20';
// смещение
$criteria->offset = '3';
// сортировка
$criteria->order = 'date_create DESC, first_name ASC';
// параметры для плейсхолдеров
$criteria->params = array(':userId'=>$userId);
// поля для выборки, по умолчанию *
$criteria->select = 'id, first_name, last_name, last_visit';
// или
$criteria->select = array('id', 'first_name', 'last_name', 'last_visit');
// если значение true то данные из внешних(связанных) таблицы будут 
// выбраны одним запросом через JOIN. Работает только с отношениями в ActiveRecord
$criteria->together = true;
// отношения, работает только в ActiveRecord
$criteria->with = array('profile', 'comments', 'posts');
$users = User::model()->findAll($criteria);

Вот и все атрибуты данного класса. В следующей заметке постараюсь описать все методы.

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

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