blocs/admin: レコードのコピーと並び替え(CopyTrait / SortTrait)
blocs/admin: レコードのコピーと並び替え(CopyTrait / SortTrait)
既存レコードの複製と、ドラッグ&ドロップによるレコードの並び替え機能について説明します。
前提条件: blocs/admin がインストール済みであること
レコードのコピー機能(CopyTrait)
既存レコードを複製して新規レコードを作成する機能です。CopyTrait は Base コントローラーに含まれますが、copy ルートは自動生成されません。利用する場合はルートを手動で追加してください。
Route::post('/{id}/copy', [SampleController::class, 'copy'])->where('id', '[0-9]+')->name('copy');
処理フロー
flowchart TD
subgraph copy["copy — データのコピー"]
direction TB
c1["getCurrent ★ — コピー元データ取得"]
c2["prepareCopy ★ — コピーデータの前処理"]
c3["executeCopy ★ — トランザクション内でレコード作成"]
c4["outputCopy — 完了処理"]
c1 --> c2 --> c3 --> c4
end
★ はオーバーライドによるカスタマイズポイントです。
メソッド一覧
| 可視性 | メソッド名 | 処理内容 |
|---|---|---|
| public | copy($id) | 指定IDのレコードをコピー |
| protected | prepareCopy() | コピーデータの前処理 |
| protected | getExcludedFieldsForCopy() | コピー時に除外するフィールドを返す |
| protected | executeCopy($requestData) | トランザクション内でレコードを作成 |
コピー時に除外されるフィールド
デフォルトで以下のフィールドがコピーから除外されます。
idcreated_atupdated_atdeleted_atdisabled_at
除外フィールドを変更するには getExcludedFieldsForCopy() をオーバーライドします。
レコードの並び替え機能(SortTrait)
表示順並び替え(ドラッグ&ドロップで order_by を更新)の機能です。一覧の カラムソート(列ヘッダーでの asc/desc 切り替え)とは別機能です(No.4.1 参照)。
ベースコントローラーの Trait ではなく、コントローラーで use SortTrait; して利用します。
処理フロー
flowchart TD
subgraph sort["sort — レコードの並び替え"]
direction TB
s1["並び順データの収集・検証"]
s2["order_by の更新"]
s3["backIndex — 一覧画面へリダイレクト"]
s1 --> s2 --> s3
end
オーバーライド可能なメソッドはありません。内部処理はすべてprivateメソッドで構成されています。
メソッド
| 可視性 | メソッド名 | 処理内容 |
|---|---|---|
| public | sort(Request $request) | リクエストの並び順データに基づいてレコードの order_by を更新 |
リクエストには各レコードの order_id(レコードID)と order_by(並び順の値)を含めます。
sort ルートの追加
SortTrait をコントローラーに use したうえで、以下のルートを手動で追加します。
Route::post('/sort', [SampleController::class, 'sort'])->name('sort');