Laravel フレームワークで Eloquent または Fluent を使用してランダムな行を選択するにはどうすればよいですか?
SQL を使用すると、RAND() による順序付けができることを知っているのですが、最初のクエリの前にレコード数をカウントせずにランダムな行を取得したいと思います。
何か案は?
ベストアンサー1
Laravel >= 5.2:
User::inRandomOrder()->get();
または特定のレコード数を取得する
// 5 indicates the number of records
User::inRandomOrder()->limit(5)->get();
// get one random record
User::inRandomOrder()->first();
またはランダムコレクションの方法:
User::all()->random();
User::all()->random(10); // The amount of items you wish to receive
Laravel 4.2.7 - 5.1:
User::orderByRaw("RAND()")->get();
Laravel 4.0 - 4.2.6:
User::orderBy(DB::raw('RAND()'))->get();
ララベル3:
User::order_by(DB::raw('RAND()'))->get();
チェックこの記事MySQLのランダム行に。Laravel 5.2ではこれをサポートしていますが、古いバージョンでは、これより良い解決策はありません。RAWクエリ。
編集1: Double Grasが述べたように、orderBy()はASCまたはDESC以外のものを許可しません。これ変更されました。それに応じて回答を更新しました。
編集2: Laravel 5.2はついに実装されましたラッパー関数これにはinRandomOrder()という関数を使用します。