Как использовать ‘IN (1,2,3)’ с findAll?

#activerecord #yii

#activerecord #yii

Вопрос:

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

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

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

ActiveRecord от Yii, похоже, вставляет одинарную кавычку вокруг связанных параметров в результирующем операторе 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);
  

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

Алексей

Ответ №2:

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

 $a=array(1,2,3,4);
$model = Student::model()->findAllByAttributes(array("id"=>$a));