ハマログ

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

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日


関連記事

GNU dateで環境変数に持つ日時文字列の操作

背景など shellで日付の操作を行いたいと思いました その利用例はこんな感じで…

redmine wiki の pdf を shell で download する

背景 あるプロジェクトで仕様をredmine wikiに書きました そのwiki…

Cプログラミング診断室

私がこの業界に入ったころ。 入社2週間前ぐらいに「この本読んで勉強しといて」とい…


← 前の投稿

次の投稿 →