Laravelでの複数のレコードの一括更新方法


  1. モデルの準備: まず、更新したいテーブルに対応するEloquentモデルを作成します。例えば、ブログ投稿を表す"Post"モデルを作成しましょう。
php artisan make:model Post
  1. コントローラの作成: 次に、一括更新の処理を行うためのコントローラを作成します。以下は、"BulkUpdateController"という名前のコントローラの例です。
php artisan make:controller BulkUpdateController
  1. ルートの設定: 作成したコントローラのルートを定義します。ルートファイル(通常は"routes/web.php")に以下のようなルートを追加します。
use App\Http\Controllers\BulkUpdateController;
Route::post('/bulk-update', [BulkUpdateController::class, 'bulkUpdate'])->name('bulk.update');
  1. コントローラの実装: "app/Http/Controllers/BulkUpdateController.php"ファイルを開き、以下のようにbulkUpdateメソッドを実装します。
use App\Models\Post;
use Illuminate\Http\Request;
class BulkUpdateController extends Controller
{
    public function bulkUpdate(Request $request)
    {
        $postsData = $request->input('posts');
        foreach ($postsData as $postData) {
            $postId = $postData['id'];
            $newTitle = $postData['title'];
            $newContent = $postData['content'];
            Post::where('id', $postId)->update([
                'title' => $newTitle,
                'content' => $newContent,
            ]);
        }
        return redirect()->back()->with('success', 'レコードが一括更新されました。');
    }
}
  1. ビューの作成: 最後に、一括更新フォームを表示するビューファイルを作成します。例えば、"resources/views/bulk-update.blade.php"という名前のファイルを作成し、以下のようなコードを書きます。

以上で、複数のレコードを一括更新する機能が完成しました。一括更新フォームに変更したいレコードの情報を入力し、フォームを送信すると、指定したテーブルのレコードが一括で更新されます。更新が完了したら、リダイレクト先で成功メッセージが表示されます。