ホームページ > 記事 > PHPフレームワーク > laravel5.2の一括削除
Laravel 5.2 は、多くの開発者に愛されている最新の PHP フレームワークです。 Laravel では、データの追加、削除、確認、変更は非常に一般的な操作であり、一括削除も例外ではありません。この記事ではLaravel5.2を使ってデータを一括削除する方法を紹介します。
始める前に、データの一括削除の操作を示すサンプル プロジェクトを作成する必要があります。コマンド ラインに次のコマンドを入力します:
laravel new batch-delete-example
次に、プロジェクト ディレクトリに入り、次のコマンドを実行して、posts という名前のデータ テーブルを作成します:
php artisan make:model Post -m
次に、次のコードを Post モデルに追加します。 :
<?php namespace App; use IlluminateDatabaseEloquentModel; class Post extends Model { protected $fillable = ['title', 'content']; }
入力ファイル DatabaseSeeder.php にサンプル データを入力します。
<?php use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { public function run() { factory(AppPost::class, 10)->create(); } }
最後に次のコマンドを実行してデータを設定します:
php artisan migrate --seed
Laravel では、Eloquent が提供する delete メソッドを使用してレコードを削除できます。
単一のレコードを削除したい場合は、次のようにすることができます:
$post = Post::find(1); $post->delete();
しかし、複数のレコードをバッチで削除したい場合はどうすればよいでしょうか?このとき、配列を受け取り、指定したフィールドの条件を満たすレコードをクエリして削除できる whereIn メソッドを使用できます。
最初に基本的な構文を見てみましょう:
Post::whereIn('id', $ids)->delete();
その中で、$ids は複数の ID 値を含む配列で、削除するレコードの ID 値を表します。
たとえば、ID 1、3、5 の 3 つのレコードを削除する場合は、次のように実行できます。
$ids = [1, 3, 5]; Post::whereIn('id', $ids)->delete();
もちろん、他の条件に基づいてレコードを削除することもできます。たとえば、2022 年より前に作成されたすべてのレコードを削除したい場合は、次のように実行できます。
Post::where('created_at', '<', '2022-01-01 00:00:00')->delete();
whereIn メソッドを使用すると、自動的に delete ステートメントに変換されるため、取得できないことに注意してください。条件を満たすすべてのレコードを個別に削除します。代わりに、これらのレコードはデータベース レベルで直接削除されるため、使用には注意が必要です。
delete メソッドを使用してレコードを削除する場合、Laravel は確認操作を提供しません。つまり、削除操作が実行されると、元に戻すことはできません。
ユーザーの削除操作を確認したい場合は、フロントエンドに確認ポップアップ ウィンドウを追加するか、バックエンドに確認ボックスを追加して、ユーザーがレコードを削除するかどうかを確認できるようにします。
この記事では、SweetAlert を使用して確認ポップアップ ウィンドウを作成します。
まず、コマンド ラインで次のコマンドを実行して SweetAlert をインストールします:
npm install sweetalert2
次に、SweetAlert CSS ファイルと JS ファイルを app.blade.php に追加します:
<!DOCTYPE html> <html> <head> <title>Laravel</title> <link rel="stylesheet" type="text/css" href="{{ asset('css/app.css') }}"> <link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/sweetalert2@10.16.0/dist/sweetalert2.min.css"> <script src="{{ asset('js/app.js') }}"></script> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@10.16.0/dist/sweetalert2.min.js"></script> </head> <body> @yield('content') </body> </html>
次にin 次のコードをブレード テンプレートに追加します。
<form method="post" action="{{ route('posts.destroy', $post->id) }}" style="display: inline-block;"> @csrf @method('DELETE') <button type="submit" class="btn btn-danger btn-sm" onclick="event.preventDefault(); Swal.fire({ title: '确定删除吗?', icon: 'warning', showCancelButton: true, confirmButtonText: '确认删除', cancelButtonText: '取消' }).then((result) => { if (result.value) { this.parentElement.submit(); } });" >删除</button> </form>
その中で、削除ボタンをクリックするためのイベントを定義します。ユーザーが削除ボタンをクリックすると、確認のポップアップ ウィンドウが表示されます。ユーザーが確認ボタンをクリックすると、JavaScript によってフォームが送信され、対応するレコードが削除されます。
削除操作のフォーム形式に @csrf と @method('DELETE') を追加していることに注意してください。これは、Laravel での削除操作は HTTP DELETE メソッドを通じて送信する必要があるためです。ブラウザは GET メソッドと POST メソッドのみをサポートしているため、非表示の入力を使用してリクエスト メソッドを指定する必要があります。
バッチ削除操作は、修復不可能なデータの損失につながる可能性があるため、必要な場合を除き、使用しないようにしてください。単一のレコードを削除する必要がある場合は、Eloquent が提供する削除メソッドを使用できます。このメソッドは、レコードを削除する前にユーザーに削除の確認を求めます。複数のレコードを削除する必要がある場合は、whereIn メソッドを使用できますが、使用する前に確認してください。
以上がlaravel5.2の一括削除の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。