web-dev-qa-db-ja.com

findAllで「IN(1,2,3)」を使用する方法は?

データベースから数人の学生を取得する必要があります。主キーはコンマ区切りの文字列になっています。

通常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つのクエリで数行のみを取得する方法はありますか?

19
oldwizard

あなたはそれをそのようにすることもできます:

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

必要な値を配列で使用します。

アレクシー

31
Aleksy Goroszko

findAllByAttributesメソッドも使用できます。

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