Правильный CDbCriteria

Общие вопросы по использованию фреймворка. Если не знаете как что-то сделать и это про Yii, вам сюда.
Ответить
Joseph Jevelin
Сообщения: 339
Зарегистрирован: 2012.01.06, 22:07

Правильный CDbCriteria

Сообщение Joseph Jevelin »

Возможно ли уменьшить данный кусок кода. В особенности интересует "addSearchCondition", без данного метода не получается вывести необходимый результат. И, саму критерию, можно ли уместить в "findAll" одной строкой?

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

$tag=Tag::model()->search($name);
$criteria=new CDbCriteria(array(
    'order'=>'create_time DESC',
));
$criteria->addSearchCondition('tags',$tag);
$model=Content::model()->findAll($criteria);
pashkash
Сообщения: 11
Зарегистрирован: 2012.03.27, 15:29

Re: Правильный CDbCriteria

Сообщение pashkash »

ты хочешь выдернуть контент по тегу?.

1. предлагаю проставить связь и юзать так:
Content::model()->with('tags')->findAll( array( 'condition'=>'tags.tag="'.$name.'"', 'order'=>'t.create_time DESC') );
2. ну или вручную: сначала ищешь тег с пом-ю find или findAll, а потом контент с нужным кондишеном..

проверить только переменные на всякий перед использованием следует.. или в кондишене использовать массив параметров, а не строку..
Аватара пользователя
timlar
Сообщения: 1382
Зарегистрирован: 2009.09.19, 17:49
Откуда: Украина, Днепропетровск
Контактная информация:

Re: Правильный CDbCriteria

Сообщение timlar »

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

$model = Content::model()->findAll(array(
    'condition' => 'tags LIKE :tag',
    'params'    => array(':tag'=>'%'.$name.'%'),
    'order'     => 'create_time DESC',
));
Twitter: @timlar_ua
Hett
Сообщения: 127
Зарегистрирован: 2011.04.25, 07:18

Re: Правильный CDbCriteria

Сообщение Hett »

Возможно есть смысл использовать scope`s
2. ну или вручную: сначала ищешь тег с пом-ю find или findAll, а потом контент с нужным кондишеном..
Это как?
pashkash
Сообщения: 11
Зарегистрирован: 2012.03.27, 15:29

Re: Правильный CDbCriteria

Сообщение pashkash »

Hett, а в скопе с параметром тоже надо будет мерджить критерию, вроде бы, не?.
ответ на вопрос:
сначала Tag::model()->find('tags=:tags', array(':tags'=>$tags)), потом то, что получилось в запросе передать в критерий поиска в Content..

у меня такой вопрос, я просто хочу уточнить что в происходит в куске кода в оп-посте.. я полагаю там используется две модели-обёртки для 2х таблиц(тегов и контента), соотв таблицы - две.. это так или нет?. (я просто search использую лишь как параметр для виджетов, не работаю с ним обычно)
потому что если я ошибся и таблица одна - то мои советы не канают и timlar всё верно написал.. а если я не ошибся и таблицы две - то для одного запроса всё-же надо использовать with с параметрами или, как верно предложили, параметризированным scope(но для него надо будет тоже мерджить критерию только в другом месте, в самой модели.. поэтому я не предлагаю автору поста этот метод, если для него осн критерий - кол-во строк)..
Ответить