![[Laravel]指定のレコードだけは先頭にして抽出する方法](https://www.yukiiworks.com/wp-content/uploads/2019/05/laravel.png)
はじめに
Laravelを使用していてDBからレコードを抽出してきた際に指定のレコードだけを先頭にしたいということがあったためその時のめも。
例えば以下のレコードがあったとして
id | name | point |
1 | 東京支店 | 100 |
2 | 本店 | 10 |
3 | 大阪支店 | 80 |
4 | 名古屋支店 | 80 |
IDが2の本店だけは先頭ににしてあとはpoint順にしたいというパターン。
pointは例えるなら各店舗毎の成績と見立てると、成績順にソートしたいけど、本店だけは必ず一番最初にしたい。ということ。
方法
以下のコードのようにします。
$storesは成績順(point)で抽出したModelのCollectionとします。
1 2 3 | $stores = $stores->sort(function ($a, $b) { return ($a->id === 2) ? -1 : 1; }); |
sortを使用します。先に成績順(point)で抽出済みなのであとは本店(id=2)を先頭に持ってくるだけ。
以上です。