LIKE в Active Record

Привет всем!

Возникла проблема с Active Record в yii. Суть проблемы такова:

Нужно выполнить запрос типа:


'SELECT * FROM contacts WHERE name LIKE "%'.$search.'%"

В Active Record делаю так:


$contact = contactModel::model()->findAll("name like %:search%", array(':search'=>$search))

В результате получаю ошибку PDO, при том, что такой запрос выполняется без проблем:


$post = contactModel::model()->findAll("name like :search", array(':search'=>$search))

Подскажите как побороть данную проблему.

Заранее, спасибо.

Первый запрос вы написали правильно, с кавычками, а в findAll почему-то потеряли.

Третий вариант правильный, в вашем случае нужно только передевать не $search, а ‘%’.$search.’%’.

Hm, can’t get what’s wrong here:


$users = User::model()->findAll("USERNAME like '%name%'");

is working properly,

but


$users = User::model()->findAll("USERNAME like '%:search%'", array(':search'=>$_GET['term']));

is not. Getting empty set.

Further investigation showed that


$users = User::model()->findAll("USERNAME like :search", array(':search'=>'%'.$_GET['term'].'%'));

is working.

Pretty strange logic, huh

$criteria = $model->getDbCriteria()->addSearchCondition(‘cfr’, ‘%’.$vol.’%’, false);

$model->findAll($criteria);

правильней вот так. Читайте доки.

Следуя идеологии mvc, правильней будет вынести построение $criteria в отдельный метод модели, в который параметром передавать $vol. Читайте книги :)

В модель выносить есть смысл только если такое встречается больше одного раза, иначе - оверхед на вызов ненужного метода модели.

Книги читать - хорошо, но Ваш совет - ето уже MVC Головного Моска :D

Да уж, оверхед на вызов метода будет такой, что всё рухнет. А если уж даже это станет критичным, то стоит задуматься, использовать ли ООП вообще.

Я согласен с тем, что модель должна предоставлять набор методов для получения данных, а городить в контроллере критерии по 10 строк, там же указывая джоины и прочее не очень то эстетично, да и затрудняет впоследствии чтение кода.

В любом случае, “правильного” варианта не существует. Однако говорить о каком-то оверхеде при вызове метода, используя при этом полностью объектно-ориентированный фреймворк - это уже, следуя вашей логике, оверхед головного моска ;)

Правильней так

http://www.yiiframework.com/wiki/199/creating-a-parameterized-like-query/

PS. (отпостил так как сам искал, а этот пост был чуть ли не одним из первых в поиске)