Пример использование CDbCriteria в Yii
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 |
// создаем экземпляр класса CDbCriteria $criteria = new CDbCriteria; // выбираемые все столбцы из всех таблиц, участвующих в запросе $criteria->select = '*'; //$criteria->select = array('post.id', 'post.category_id', 'post.user_id', 'post.title', 'user.name'); //$criteria->select = 'post.id, post.category_id, post.user_id, post.title, user.name'; // псевдоним(алиас) для текущей таблицы $criteria->alias = 'post'; // выбираем только неповторяющиеся строки данных $criteria->distinct = true; // задаем условие запроса $criteria->condition = 'post.is_hide = :is_hide AND post.user_id = :author_id'; // группируем $criteria->group = 'post.category_id'; // условие для GROUP BY $criteria->having = 'post.viwed > 100'; // задаем соединение с другой(ими) таблицами $criteria->join = 'LEFT JOIN users as user ON user.id = post.user_id'; // максимальное количество возвращаемых записей $criteria->limit = 20; // смещение, с которого будут возвращаться записи $criteria->offset = 5; // сортировки результатов запроса $criteria->order = 'post.date_create'; // параметры для замены в SQL выражении, для condition $criteria->params = array(':is_hide'=>0, ':author_id'=>Yii::app()->user->id); // внешние таблицы должны быть связаны с первичной таблицей в одном SQL-запросе $criteria->together = true; // получение связанных объектов в режиме "жадной" загрузки $criteria->with = array('profile', 'comments', 'category'); // добавляем условие between (диапазон) $criteria->addBetweenCondition('post.date_update', '09-12-2011', '09-12-2015'); // добавляем условие для сравнения переданного списка со значениями столбцов $criteria->addColumnCondition(array('status'=>1), 'AND') // добавляем условие IN к уже имеющемуся (condition) $criteria->addInCondition('post.category_id', array('6', '24', '247'), 'OR'); // добавляем условие к уже имеющемуся (condition) $criteria->addCondition("count_comments <= :count_comments"); // сливает критерий с другим if($_POST['search_text']){ $criteriaSearch = new CDbCriteria(); $criteriaSearch->addSearchCondition('description', $_POST['search_text']. true, 'AND', 'LIKE'); $criteria->mergeWith($criteriaSearch, 'AND'); } $posts = Post::model()->findAll($criteria); |