CActiveFinder::find()

Предварительное обсуждение найденных ошибок перед отправкой их авторам фреймворка, а также внесение новых предложений.
Ответить
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

CActiveFinder::find()

Сообщение slavcodev »

Может кто-то объяснить почему CActiveFinder в отличии от CActiveRecord в методе query() не ставит LIMIT 1 в запрос?
т.е.
Post::model()->find() выполняет запрос типа SELECT ..... LIMIT 1
а
Post::model()->with('author')->find() уже SELECT .... LIMIT 5
Жду Yii 3!
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: CActiveFinder::find()

Сообщение Ekstazi »

Хы, никогда не думал так with использовать. limit 5 точно прибавляется ?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: CActiveFinder::find()

Сообщение slavcodev »

with, это для примера, его можно и в критерии установить. Просто если есть with тогда запрос генерирует finder.
Макс вопрос в другом, лимит точно не прибавляется? )))
Жду Yii 3!
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: CActiveFinder::find()

Сообщение samdark »

Хм… вроде пару версий назад методы finder-а стали возвращать модель. Можно код полностью?
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: CActiveFinder::find()

Сообщение slavcodev »

Контроллер

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

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 ver: 1.1.7-dev
Жду Yii 3!
Ekstazi
Сообщения: 1428
Зарегистрирован: 2009.08.20, 22:54
Откуда: Молдова, Бельцы
Контактная информация:

Re: CActiveFinder::find()

Сообщение Ekstazi »

Точно, баг.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: CActiveFinder::find()

Сообщение samdark »

Не факт, что баг: LIMIT 1 при использовании HAS_MANY или MANY_MANY использовать нельзя.
Ответить