概要
$ids
の順番通りにクエリの結果を並び替えて取得したかったが少し詰まったのでやり方を紹介する
元々の処理
$ids = [3, 2, 4];
$users = User::query()
->whereIn('id', $ids)
->pluck('name', 'id')
->toArray();
期待する結果
[
3 => "hoge",
2 => "fuga",
4 => "hogehoge",
];
やり方
SQLのFIELD
関数を利用して任意の並び順を指定します
$ids = [3, 2, 4];
$sortIds = implode(', ', $ids);
$contents = TrainingContent::query()
->whereIn('id', $contentIds)
->orderByRaw("FIELD(id, $sortOption)")
->pluck('title', 'id')
->toArray();