Может кто-то объяснить почему CActiveFinder в отличии от CActiveRecord в методе query() не ставит LIMIT 1 в запрос?
т.е.
Post::model()->find() выполняет запрос типа SELECT ..... LIMIT 1
а
Post::model()->with('author')->find() уже SELECT .... LIMIT 5
CActiveFinder::find()
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
CActiveFinder::find()
Жду Yii 3!
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: CActiveFinder::find()
Хы, никогда не думал так with использовать. limit 5 точно прибавляется ?
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: CActiveFinder::find()
with, это для примера, его можно и в критерии установить. Просто если есть with тогда запрос генерирует finder.
Макс вопрос в другом, лимит точно не прибавляется? )))
Макс вопрос в другом, лимит точно не прибавляется? )))
Жду Yii 3!
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: CActiveFinder::find()
Хм… вроде пару версий назад методы finder-а стали возвращать модель. Можно код полностью?
Нравится Yii? Давайте сделаем его лучше!.
- slavcodev
- Сообщения: 3134
- Зарегистрирован: 2009.04.02, 21:42
- Откуда: Valencia
- Контактная информация:
Re: CActiveFinder::find()
Контроллер
В итоге запросы
Yii ver: 1.1.7-dev
Код: Выделить всё
public function actionTest()
{
$criteria=new CDbCriteria();
$criteria->condition='t.id=1';
$criteria->limit=5;
$model=NewsModel::model()->find($criteria);
$model=NewsModel::model()->with('section')->find($criteria);
}
Код: Выделить всё
SELECT * FROM `news` `t` WHERE (`t`.isRemoved!=:ycp0) AND (t.id=1) ORDER BY t.createTime DESC LIMIT 1
Код: Выделить всё
SELECT `t`.`id` AS `t0_c0`, `t`.`title` AS `t0_c1`, `t`.`content` AS `t0_c2`, `t`.`cover` AS `t0_c3`, `t`.`sectionId` AS `t0_c4`, `t`.`authorId` AS `t0_c5`, `t`.`createTime` AS `t0_c6`, `t`.`modifyTime` AS `t0_c7`, `t`.`isRemoved` AS `t0_c8`, `section`.`id` AS `t1_c0`, `section`.`alias` AS `t1_c1`, `section`.`title` AS `t1_c2`, `section`.`createTime` AS `t1_c3`, `section`.`isRemoved` AS `t1_c4` FROM `news` `t` LEFT OUTER JOIN `sections` `section` ON (`t`.`sectionId`=`section`.`id`) WHERE ((`t`.isRemoved!=:ycp1) AND (t.id=1)) ORDER BY t.createTime DESC LIMIT 5
Жду Yii 3!
-
- Сообщения: 1428
- Зарегистрирован: 2009.08.20, 22:54
- Откуда: Молдова, Бельцы
- Контактная информация:
Re: CActiveFinder::find()
Точно, баг.
- samdark
- Администратор
- Сообщения: 9489
- Зарегистрирован: 2009.04.02, 13:46
- Откуда: Воронеж
- Контактная информация:
Re: CActiveFinder::find()
Не факт, что баг: LIMIT 1 при использовании HAS_MANY или MANY_MANY использовать нельзя.
Нравится Yii? Давайте сделаем его лучше!.