ホームページ  >  記事  >  PHPフレームワーク  >  laravel5.2の一括削除

laravel5.2の一括削除

王林
王林オリジナル
2023-05-20 16:26:40629ブラウズ

Laravel 5.2 は、多くの開発者に愛されている最新の PHP フレームワークです。 Laravel では、データの追加、削除、確認、変更は非常に一般的な操作であり、一括削除も例外ではありません。この記事ではLaravel5.2を使ってデータを一括削除する方法を紹介します。

  1. 準備

始める前に、データの一括削除の操作を示すサンプル プロジェクトを作成する必要があります。コマンド ラインに次のコマンドを入力します:

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
  1. データを削除しますバッチで

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 ステートメントに変換されるため、取得できないことに注意してください。条件を満たすすべてのレコードを個別に削除します。代わりに、これらのレコードはデータベース レベルで直接削除されるため、使用には注意が必要です。

  1. 削除操作の確認

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 サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。