2011-05-10 14 views
17

Necesito obtener un par de Estudiantes de la base de datos, y tengo sus claves principales en una cadena separada por comas.Cómo usar 'IN (1,2,3)' con findAll?

normalmente utilizando SQL sería algo así como:

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

ActiveRecord de Yii parece insertar una comilla simple en torno obligado parámetros en la instrucción SQL resultante que provoca que falle la consulta cuando se utiliza enlace de parámetros.

Esto funciona, pero no utiliza el enlace seguro de parámetros.

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

¿Hay alguna manera de seguir utilizando el enlace de parámetros y obtener solo un par de filas en una sola consulta?

Respuesta

29

Puede hacerlo también de esa manera:

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

y utilizar en conjunto todos los valores que necesita.

Aleksy

21

Puede utilizar findAllByAttributes método también:

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