ハマログ

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

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   kaneko tomo   2016年11月13日


関連記事

Laravel4.2のソフトデリート(論理削除)について

Laravel4.1で開発中のシステムをLaravel4.2にアップグレードしま…

Laravel4でmeta情報を編集

複数コントローラーで同一viewを指定している場合に オンコーディングだとmet…

HTTPSページの優先インデックス登録(Google)

HTTPSページがHTTPページよりも優先してGoogleにインデックス登録され…


← 前の投稿

次の投稿 →