メインコンテンツへスキップ

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) トランザクション内でレコードを作成

コピー時に除外されるフィールド

デフォルトで以下のフィールドがコピーから除外されます。

除外フィールドを変更するには 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');