Skip to main content

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');

処理フロー

copy ─── データのコピー
  ├─ getCurrent ★ ............. コピー元データ取得
  ├─ prepareCopy ★ ............ コピーデータの前処理
  ├─ executeCopy ★ ............ トランザクション内でレコード作成
  └─ outputCopy ................ 完了処理

★ はオーバーライドによるカスタマイズポイントです。

メソッド一覧

可視性 メソッド名 処理内容
public copy($id) 指定IDのレコードをコピー
protected prepareCopy() コピーデータの前処理
protected getExcludedFieldsForCopy() コピー時に除外するフィールドを返す
protected executeCopy($requestData) トランザクション内でレコードを作成

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

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

除外フィールドを変更するには getExcludedFieldsForCopy() をオーバーライドします。

レコードの並び替え機能(SortTrait)

表示順並び替え(ドラッグ&ドロップで order_by を更新)の機能です。一覧の カラムソート(列ヘッダーでの asc/desc 切り替え)とは別機能です(No.4.1 参照)。

ベースコントローラーの Trait ではなく、コントローラーで use SortTrait; して利用します。

処理フロー

sort ─── レコードの並び替え
  ├─ (並び順データの収集・検証)
  ├─ (order_by の更新)
  └─ backIndex ................ 一覧画面へリダイレクト

オーバーライド可能なメソッドはありません。内部処理はすべてprivateメソッドで構成されています。

メソッド

可視性 メソッド名 処理内容
public sort(Request $request) リクエストの並び順データに基づいてレコードの order_by を更新

リクエストには各レコードの order_id(レコードID)と order_by(並び順の値)を含めます。

sort ルートの追加

SortTrait をコントローラーに use したうえで、以下のルートを手動で追加します。

Route::post('/sort', [SampleController::class, 'sort'])->name('sort');