validol
(Valeri Vlasov)
August 28, 2010, 5:04pm
1
Привет всем!
Возникла проблема с 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))
Подскажите как побороть данную проблему.
Заранее, спасибо.
andy_s
(Arekandrei)
August 28, 2010, 5:40pm
2
Первый запрос вы написали правильно, с кавычками, а в 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);
правильней вот так. Читайте доки.
grigori
(Public)
June 10, 2011, 2:06pm
5
a.spiridonov:
$criteria = $model->getDbCriteria()->addSearchCondition(‘cfr’, ‘%’.$vol.’%’, false);
$model->findAll($criteria);
правильней вот так. Читайте доки.
Следуя идеологии mvc, правильней будет вынести построение $criteria в отдельный метод модели, в который параметром передавать $vol. Читайте книги
madand
(Dev Madand)
July 11, 2011, 3:51pm
6
В модель выносить есть смысл только если такое встречается больше одного раза, иначе - оверхед на вызов ненужного метода модели.
Книги читать - хорошо, но Ваш совет - ето уже MVC Головного Моска
andy_s
(Arekandrei)
July 11, 2011, 4:20pm
7
madand:
В модель выносить есть смысл только если такое встречается больше одного раза, иначе - оверхед на вызов ненужного метода модели.
Книги читать - хорошо, но Ваш совет - ето уже MVC Головного Моска
Да уж, оверхед на вызов метода будет такой, что всё рухнет. А если уж даже это станет критичным, то стоит задуматься, использовать ли ООП вообще.
Я согласен с тем, что модель должна предоставлять набор методов для получения данных, а городить в контроллере критерии по 10 строк, там же указывая джоины и прочее не очень то эстетично, да и затрудняет впоследствии чтение кода.
В любом случае, “правильного” варианта не существует. Однако говорить о каком-то оверхеде при вызове метода, используя при этом полностью объектно-ориентированный фреймворк - это уже, следуя вашей логике, оверхед головного моска
Mirocow
(Mr Mirocow)
May 23, 2012, 1:16am
8
Правильней так
http://www.yiiframework.com/wiki/199/creating-a-parameterized-like-query/
PS. (отпостил так как сам искал, а этот пост был чуть ли не одним из первых в поиске)