いっきのblogスマートフォン用の表示で見るいっきのblog技術とか色々この広告は、90日以上更新していないブログに表示しています。ソートどうも、くずきです。こないだ、セールスの方からリストの表示をランダムでだせないのかというご要望がありまして、実装してみた話です。DB側でランダムで出す基本的にソートはSQL側で行なっているため、なるべくDB側でできないかな〜と思ってたらありました。RAND()をつけるだけで、ランダムになるというすごく便利な代物。このままだと毎回変わってしまうため、引数にseedをつければランダムだけと固定にできる。RAND()を呼ぶEloquentなら絶対実装してくれてる!!!と思ったら流石ありました。https://stackoverflow.com/questions/13917558/laravel-eloquent-or-fluent-random-rowModel::inRandomOrder()バージョンによって書き方は変わるみたいだけど、5.2以上はこれでいけるみたい。このままだと先ほども書いたとおり、毎回読み込むたびに変わってしまう。1ページならいいけど、実際には->paginate()など使ってページネーションしてる場合がほとんだと思う。2ページ目をみにいったのに、新しくランダムになってしまうせいで1ページ目に表示されたものが出てしまうなんてこともあり得るだろう。こちらも引数をつけて固定にする。Model::inRandomOrder(1234567)日ごとにソートさせるランダムの値を固定のシードで固定しまったら、テーブルのレコードが増減しない限り固定な訳で・・、日ごとにランダムにさせよう!と思いできた最終コード。->inRandomOrder($today);Carbonで今日のタイムスタンプを取りそれを固定にするやり方で、日ごとに変わるソートの出来上がり。問題点があり日をまたいだときに新しいランダムになってしまうテーブルのレコードが増減するとランダムの順番も変わってしまうという、どうしもない2点がある。一つ目の問題点の解決方法は、サーバー側にアクセスした際にシード値をフロント側に返してその値を使いまわすことで解決はできそうだなぁと思う。二つ目の問題点は、過去のレコードをランダムにし、新しいレコードを1ページ目などに表示する仕組みにすれば良さそう。過去のレコードを埋もれさせないって意味ではこちらは近いうちにやっときたい。感想プログラム側でゴリらなくても、DB側でいい感じにランダムにできて楽だった。シード値もフロントと連携すれば解決するし、新鮮さがないリストに使うにはもってこいなんではないだろうか。22:55Laravelで日ごとに変わるランダムなソートをするTweet広告を非表示にする関連記事2018-07-26TF-IDFの理論をざっくり理解する1最近、自社のプロダクトで自然言語処理がよく使われるようにな...2018-03-05Laravelでバリューオブジェクトのみを実装するどうも、くずき(@kzkohashi)です。今回はDDDにおける、バリュ...2018-02-25Laravelでリポジトリーパターンを実装して見た感想どうも、いっき(@kzkohashi)です。(1)はてなブログをはじめよう!kzkohashiさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。