Как использовать 'IN (1,2,3)' с findAll?
Мне нужно получить пару студентов из базы данных, и у меня есть их первичные ключи в разделенной запятой строке.
Обычно с использованием SQL это будет что-то вроде:
$cleanedStudentIdStringList = "1,2,3,4";
SELECT * FROM Student WHERE id IN ($cleanedStudentIdStringList)
Yii ActiveRecord, кажется, вставляет одну одинарную цитату вокруг связанных параметров в результирующую инструкцию SQL, которая приводит к сбою запроса при использовании привязки параметров.
Это работает, но не использует безопасную привязку параметров.
$students = Student::model()->findAll("id IN ({$_POST['studentIds']})");
Есть ли способ по-прежнему использовать привязку параметров и получить только пару строк в одном запросе?
Ответы
Ответ 1
Вы можете сделать это также следующим образом:
$criteria = new CDbCriteria();
$criteria->addInCondition("id", array(1,2,3,4));
$result = Student::model()->findAll($criteria);
и используйте в массиве любые значения, которые вам нужны.
Aleksy
Ответ 2
Вы также можете использовать метод findAllByAttributes
:
$a=array(1,2,3,4);
$model = Student::model()->findAllByAttributes(array("id"=>$a));