Pешение «в лоб»
$ids = array(1, 2, 3); $dataProvider=new CActiveDataProvider('User',array( 'criteria'=>array( 'condition'=>'id IN ('.implode(',', $ids).')', ) )); $this->render('admin',array( 'model'=>$dataProvider, ));
Говнокод выглядит не очень красиво; если массив $ids окажется пустым, возникнет ошибка; полученные значения нужно проверить. Далее решение с помощью библиотеки Yii.
$model = User::model()->findAllByAttributes(array('id'=>array(1, 2, 3))); $dataProvider=new CActiveDataProvider('User'); $dataProvider->setData($model); $this->render('index',array( 'dataProvider'=>$dataProvider, )); Метод findAllByAttributes класса CActiveRecord позволяет искать записи в БД по названию поля и значению. При этом если значение является массивом, то используется оператор IN. Этот же самый код можно записать немного иначе. $dataProvider=new CActiveDataProvider('User'); $dataProvider->criteria->addInCondition('id', array(1,2,3)); $this->render('index',array( 'dataProvider'=>$dataProvider, )); **Тестируем** Попробуем в массиве передать строку. $dataProvider->criteria->addInCondition('id', array(1,2,'test')); В результате будет выполнен следующий запрос. SELECT * FROM 'tbl_user' WHERE "id" IN (1, 2, 0) Т.е. текстовое значение было заменено нулем, что вполне логично, т.к. поле id имеет тип INT. Если запрос будет выполняться к полю текстового типа, то текстовые и числовые значения будут вставлены в кавычках. $dataProvider->criteria->addInCondition('id', array(1, 'admin','user')); сформирует такой запрос SELECT * FROM 'tbl_user' WHERE "id" IN ('1','admin', 'user') А если массив окажется пуст, то фреймворк гарантирует, что из таблицы не будет выбрана ни одна запись. $dataProvider->criteria->addInCondition('id', array()); SELECT * FROM 'tbl_user' WHERE 0=1

Leave a Comment