LaravelのEloquent,Query Builderで値をランダムソートする
検証環境
PHP5.6
Laravel5.3
Laravel5.2からEloquent(ORM)とQuery BuilderでinRandomOrderメソッドが利用できるようになりました。
検索結果をランダムにソートして返却することができます。
ドキュメント
Database: Query Builder – Ordering, Grouping, Limit, & Offset
inRandomOrder
The inRandomOrder method may be used to sort the query results randomly. For example, you may use this method to fetch a random user:
$randomUser = DB::table(‘users’)->inRandomOrder()->first();
for($i = 0; $i < 5; $i++){ $job = Job::inRandomOrder()->first(); print($job->name . PHP_EOL); }
結果
求人1 求人12 求人4 求人31 求人18
できました。
続いて、relationに対して実行してみます。
for ($i = 0; $i < 5; $i++) { $job = Job::where('id', 10)->first(); $environment = $job->environments()->inRandomOrder()->first(); print($environment->name . PHP_EOL); }
結果
土日休み 土日休み 土日休み 土日休み 土日休み
relationには利用できないようです。(しかもエラーにならない)
relationに利用する場合は従来通りrandom関数で対応することにします。
for ($i = 0; $i < 5; $i++) { $job = Job::where('id', 10)->first(); $environment = $job->environments->random(); print($environment->name . PHP_EOL); }
結果
フレックスタイム制 土日休み 試用期間あり 社内研修制度あり 資格取得補助あり
できた