如何在 yii2 中使用 findAll()?

How to use findAll() in yii2?

我想知道如何获取 user 的所有数据以及 where 条件

的数组 ID

yii 你可以做这样的事情

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

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

现在 yii2 CDbCriteria 不存在,那么我应该使用哪种方法来实现相同的目标??

我试过了,但它只有 returns 数组中第一个 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);

还有returns数组中第一个id的数据是屏幕截图

我猜这就是它不起作用的原因

谢谢你

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

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

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

使用 Yii2 获取并检查是否存在的示例:

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

或者只是:

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

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

更新: 注意你实际传递的内容 $ids

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

var_dump($result)

这样试试