Как использовать IN (1,2,3) с findAll? - PullRequest
19 голосов
/ 10 мая 2011

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

Обычно с использованием SQL это будет что-то вроде:

$cleanedStudentIdStringList = "1,2,3,4";
SELECT * FROM Student WHERE id IN ($cleanedStudentIdStringList)

ActiveRecord в Yii, кажется, вставляет одну кавычку вокруг связанных параметров в результирующий оператор SQL, что приводит к сбою запроса при использовании привязки параметров.

Это работает, но не использует безопасную привязку параметров.

$students = Student::model()->findAll("id IN ({$_POST['studentIds']})");

Есть ли способ по-прежнему использовать привязку параметров и получать только несколько строк в одном запросе?

Ответы [ 2 ]

31 голосов
/ 10 мая 2011

Вы также можете сделать это так:

$criteria = new CDbCriteria();
$criteria->addInCondition("id", array(1,2,3,4));
$result = Student::model()->findAll($criteria);

и используйте в массиве любые значения, которые вам нужны.

Aleksy

23 голосов
/ 15 января 2014

Вы также можете использовать метод findAllByAttributes:

$a=array(1,2,3,4);
$model = Student::model()->findAllByAttributes(array("id"=>$a));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...