在yii2中按rand()排序

Mik*_*oss 11 mysql yii2 yii2-advanced-app yii2-basic-app

嗨伙计们,我很困惑一件事

我想写下面的查询,yii2但我无法得到预期的输出

SELECT * FROM user where category_id=5 ORDER BY rand() LIMIT 4
Run Code Online (Sandbox Code Playgroud)

为此,我做了以下

$data= User::find()->where(['category_id'=> 5])->orderBy(['rand()'])->limit(4);
Run Code Online (Sandbox Code Playgroud)

但它会生成如下命令

SELECT * FROM `user` WHERE `category_id`=5 ORDER BY `0` LIMIT 4
Run Code Online (Sandbox Code Playgroud)

哪个不是有效的mysql语句,那么我该如何才能使查询正确?

我的目标是从user表中获取任意随机的4条记录.

aro*_*hev 23

将其包装到yii\db\Expression中以防止转义并删除数组部分:

use yii\db\Expression;

...

$query = User::find()
    ->where(['category_id' => 5])
    ->orderBy(new Expression('rand()'))
    ->limit(4);
Run Code Online (Sandbox Code Playgroud)