ハマログ

株式会社イーツー・インフォの社員ブログ

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);
}

結果

フレックスタイム制
土日休み
試用期間あり
社内研修制度あり
資格取得補助あり

できた

inRandomOrderLaravelrandomSortソートランダム

  kaneko tomo   2016年11月13日


関連記事

PHPでIMAP接続してメールを取得する

特定のメールアドレスで受信したメールをChatworkのAPIに送信するために、…

Amazon Simple Queue Service をPHPで使ってみる

皆様、お疲れ様です。 uminchuです 今回は前回軽く触れたAWSの機能の一つ…

Amazon Linux 2 x86_64 standard: 3.0のCodeBuild環境でPHP8.0を使う方法。

『今度の開発はPHP8.0環境にLaravel8でソース組んでるんでインフラもそ…


← 前の投稿

次の投稿 →