実現したいこと
マスタテーブルに対して、任意の並び替えを行いたい
前提
約500件のレコードが存在するマスタテーブルがあります。
idカラムはAUTO_INCREMENTで実装しているため、今後のマスタデータの追加を想定すると、並び替えをidで行うことはできません。
そこで、以下の方法を考えました。
- ソート用のカラム(sort_orderカラム)を持ち、マスタデータの追加の際に全レコードのsort_orderカラムを任意の並び替えとなるように連番を振りなおす。
発生している問題
下記のコードでエラーは発生しませんが、500件近くのレコードに対してforeachでupdateを行うのは処理として適切なのかどうか、意見をお聞きしたいです。
不適切ならば、代替方法としてどのような方法があるかもお教えいただければと思います。
該当のソースコード
※Controller側の処理です。
php
1//beforeInsertはどのレコードの前に並び替えたいか(そのレコードのid) 2$beforeInsert = intval($request->beforeInsert); 3 4$order = array_map(function ($a){return $a['id'];}, Master::select('id')->orderby('sort_order')->get()->toArray()); 5$index = array_search($beforeInsert, $order, false); 6 7$create_record = Master::create($insert_data); 8 9$id = $create_record['id']; 10array_splice($order, $index , 0, $id); 11 12foreach ($order as $key => $value) { 13 Master::where('id','=',$value)->update(['sort_order' => $key + 1]); 14} 15
試したこと
上記コード
補足情報(FW/ツールのバージョンなど)
laravel9
回答4件
あなたの回答
tips
プレビュー
下記のような回答は推奨されていません。
このような回答には修正を依頼しましょう。
また依頼した内容が修正された場合は、修正依頼を取り消すようにしましょう。