laravel5.2批量刪除

laravel 5.2 是一款現(xiàn)代化的 php 框架,受到了眾多開發(fā)者的喜愛。在 laravel 中,數(shù)據(jù)的增刪查改是非常常見的操作,而批量刪除也不例外。本文將介紹使用 laravel 5.2 批量刪除數(shù)據(jù)的方法。

  1. 準(zhǔn)備工作

在開始之前,我們需要先創(chuàng)建一個示例項目來演示批量刪除數(shù)據(jù)的操作。在命令行中輸入以下命令:

laravel new batch-delete-example

然后進(jìn)入項目目錄并運(yùn)行以下命令來創(chuàng)建一個名為 posts 的數(shù)據(jù)表:

php artisan make:model Post -m

然后在 Post 模型中添加以下代碼:

<?php namespace App;  use IlluminateDatabaseEloquentModel;  class Post extends Model {     protected $fillable = ['title', 'content']; }

在填充文件 DatabaseSeeder.php 中填充一些示例數(shù)據(jù):

<?php use IlluminateDatabaseSeeder;  class DatabaseSeeder extends Seeder {     public function run()     {         factory(AppPost::class, 10)->create();     } }

最后運(yùn)行以下命令來填充數(shù)據(jù):

php artisan migrate --seed
  1. 批量刪除數(shù)據(jù)

在 Laravel 中,我們可以使用 Eloquent 提供的 delete 方法來刪除記錄。

如果我們想要刪除單個記錄,可以這樣做:

$post = Post::find(1); $post-&gt;delete();

但是如果我們要批量刪除多條記錄怎么辦呢?這時候我們可以使用 whereIn 方法,這個方法可以接收一個數(shù)組,在指定字段內(nèi)查詢符合條件的記錄并將其刪除。

我們先來看一下基本語法:

Post::whereIn('id', $ids)-&gt;delete();

其中,$ids 是一個包含多個 id 值的數(shù)組,代表了我們要刪除的記錄的 id 值。

例如,如果我們要刪除 id 為 1, 3, 5 的三條記錄,可以這樣做:

$ids = [1, 3, 5]; Post::whereIn('id', $ids)-&gt;delete();

當(dāng)然,我們也可以根據(jù)其他條件來刪除記錄。例如,如果我們要刪除所有創(chuàng)建時間早于 2022 年的記錄,可以這樣做:

Post::where('created_at', 'delete();

需要注意的是,使用 whereIn 方法會自動轉(zhuǎn)換為一個 delete 語句,因此它并不會檢索所有符合條件的記錄并分別刪除它們,而是會在數(shù)據(jù)庫層面直接刪除這些記錄,因此要慎重使用。

  1. 確認(rèn)刪除操作

當(dāng)我們使用 delete 方法刪除記錄時,Laravel 并沒有提供確認(rèn)操作,這意味著一旦執(zhí)行刪除操作就無法撤銷。

如果我們想要確認(rèn)用戶的刪除操作,可以在前端添加一個確認(rèn)彈窗或者在后端添加一個確認(rèn)框來讓用戶確認(rèn)是否要刪除記錄。

在本文中,我們使用 SweetAlert 來創(chuàng)建一個確認(rèn)彈窗。

首先,在命令行中運(yùn)行以下命令來安裝 SweetAlert:

npm install sweetalert2

然后在 app.blade.php 中添加 SweetAlert CSS 和 JS 文件:

               <title>Laravel</title><link rel="stylesheet" type="text/css" href="%7B%7B%20asset('css/app.css')%20%7D%7D"><link rel="stylesheet" type="text/css" href="https://cdn.jsdelivr.net/npm/sweetalert2@10.16.0/dist/sweetalert2.min.css"><script src="%7B%7B%20asset('js/app.js')%20%7D%7D"></script><script src="https://cdn.jsdelivr.net/npm/sweetalert2@10.16.0/dist/sweetalert2.min.js"></script>         @yield('content')      

然后在 blade 模板中添加以下代碼:


@csrf @method(‘DELETE’)

在其中,我們定義了一個點擊刪除按鈕的事件,它會在用戶點擊刪除按鈕時彈出一個確認(rèn)彈窗。如果用戶點擊確認(rèn)按鈕,JavasScript 會提交表單并刪除相應(yīng)記錄。

需要注意的是,在刪除操作的 form 表單中,我們加上了 @csrf 和 @method(‘DELETE’),這是因為 Laravel 中的刪除操作需要通過 HTTP DELETE 方法來提交,而瀏覽器只支持 GET 和 POST 方法,因此需要使用 hidden input 來指定請求方法。

除非必要,我們應(yīng)該盡量避免使用批量刪除操作,因為它可能會導(dǎo)致數(shù)據(jù)的不可挽回的丟失。如果需要刪除單個記錄,可以使用 Eloquent 提供的 delete 方法,它會在刪除記錄前詢問用戶是否確認(rèn)刪除。如果需要刪除多個記錄,可以使用 whereIn 方法,但要注意使用前應(yīng)仔細(xì)確認(rèn)。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點贊12 分享