Laravel 5.2 是一款現代化的 PHP 框架,受到了許多開發者的喜愛。在 Laravel 中,資料的增刪查改是非常常見的操作,而大量刪除也不例外。本文將介紹使用 Laravel 5.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 的三筆記錄,可以這樣做:
$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
然後在app.blade.php 中加入SweetAlert CSS 和JS 檔案:
<!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>
然後在blade 範本中新增以下程式碼:
<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>
在其中,我們定義了一個點擊刪除按鈕的事件,它會在使用者點擊刪除按鈕時彈出一個確認彈窗。如果使用者點擊確認按鈕,JavasScript 會提交表單並刪除對應記錄。
需要注意的是,在刪除操作的form 表單中,我們加上了@csrf 和@method('DELETE'),這是因為Laravel 中的刪除操作需要透過HTTP DELETE 方法來提交,而瀏覽器只支援GET 和POST 方法,因此需要使用hidden input 來指定請求方法。
除非必要,我們應該盡量避免使用大量刪除操作,因為它可能會導致資料的不可挽回的遺失。如果需要刪除單一記錄,可以使用 Eloquent 提供的 delete 方法,它會在刪除記錄前詢問使用者是否確認刪除。如果需要刪除多個記錄,可以使用 whereIn 方法,但要注意使用前應仔細確認。
以上是laravel5.2批量刪除的詳細內容。更多資訊請關注PHP中文網其他相關文章!