web-dev-qa-db-ja.com

yii2のRand()による順序

こんにちはみんな私は1つのことに混乱しています

次のクエリをyii2で記述したいのですが、予期した出力を取得できません

SELECT * FROM user where category_id=5 ORDER BY Rand() LIMIT 4

そのために私は以下を行いました

$data= User::find()->where(['category_id'=> 5])->orderBy(['Rand()'])->limit(4);

しかし、それは次のようなコマンドを生成します

SELECT * FROM `user` WHERE `category_id`=5 ORDER BY `0` LIMIT 4

有効なmysqlステートメントではないので、クエリを正しく行うにはどうすればよいですか?

私の目的は、userテーブルからランダムな4つのレコードを取得することです。

12
Mike Ross

それを yii\db\Expression にラップして、エスケープを防ぎ、配列部分を削除します。

use yii\db\Expression;

...

$query = User::find()
    ->where(['category_id' => 5])
    ->orderBy(new Expression('Rand()'))
    ->limit(4);
23
arogachev

私は実際にはyii2クエリビルダーの専門家ではありませんが、順序が役立つように指定してください

$data= User::find()->where(['category_id'=> 5])->orderBy(['Rand()' => SORT_DESC])->limit(4);
4
Shadow