如何在yii2中使用findAll()?

时间:2015-09-30 02:56:22

标签: arrays multidimensional-array yii2 yii2-advanced-app

我想知道如何获取user的所有数据,其数组ID为where条件

yii你可以做这样的事情

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

$userDtls = Student::model ()->findAllByAttributes ( array (
                    'id' => explode ( ",", $_POST ['studentIds'] ) 
            ) );

现在yii2 CDbCriteria不在那里,我应该采用哪种方法来实现同样的目标?

我试过这个,但它只返回数组中第一个id的数据

$result = Users::findAll([ 'id'=> $_POST ['keylist']]);

在文档中写道,我们可以使用此

$result = Users::findAll([1,488,489]);

但我的数组$_POST['keylist']就是这样的

keylist{
   0='1'
   1='5'
   2='8'
}

我也试过这个

$ids = \Yii::$app->request->post('keylist', []);

$result = Users::findAll($ids);

仍然返回数组中第一个id的数据,这里是截图

enter image description here

这就是为什么它不起作用我猜

谢谢

2 个答案:

答案 0 :(得分:3)

$users = Users::findAll($ids);是一种正确的方法。

在官方文档here中查看$ids中可以传递的内容。

正如我向您解释here,您永远不应该信任来自$_POST的数据并检查它是否存在并在使用前进行验证。

使用Yii2获取和检查存在的示例:

$ids = \Yii::$app->request->post('ids');

或者只是:

$ids = isset($_POST['ids']) ? $_POST['ids'] : null;

对于更复杂的情况,我建议创建单独的搜索模型并将其与验证一起使用,例如,请参阅Gii的CRUD。

更新:请注意您实际传递的内容为$ids

答案 1 :(得分:0)

$students_ids = Yii::$app->request->post('studentIds');
if(isset($students_ids)) {
     $result = Users::find()->where(['in','id',$students_ids])->all();
}

var_dump($result)

试试这个