Laravel 5.2는 많은 개발자들에게 사랑받는 최신 PHP 프레임워크입니다. Laravel에서는 데이터 추가, 삭제, 확인 및 수정이 매우 일반적인 작업이며 일괄 삭제도 예외는 아닙니다. 이번 글에서는 Laravel 5.2를 사용하여 데이터를 일괄 삭제하는 방법을 소개합니다.
시작하기 전에 데이터 일괄 삭제 작업을 시연하기 위한 샘플 프로젝트를 만들어야 합니다. 명령줄에 다음 명령을 입력합니다.
laravel new batch-delete-example
그런 다음 프로젝트 디렉터리로 이동하고 다음 명령을 실행하여 post라는 데이터 테이블을 만듭니다.
php artisan make:model Post -m
그런 다음 Post 모델에 다음 코드를 추가합니다.
<?php namespace App; use IlluminateDatabaseEloquentModel; class Post extends Model { protected $fillable = ['title', 'content']; }
file DatabaseSeeder.php 몇 가지 샘플 데이터를 채우세요:
<?php use IlluminateDatabaseSeeder; class DatabaseSeeder extends Seeder { public function run() { factory(AppPost::class, 10)->create(); } }
마지막으로 다음 명령을 실행하여 데이터를 채웁니다:
php artisan migrate --seed
Laravel에서는 Eloquent가 제공하는 삭제 메소드를 사용하여 레코드를 삭제할 수 있습니다. .
단일 레코드를 삭제하려면 다음과 같이 하면 됩니다.
$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 메소드를 사용하여 레코드를 삭제할 때 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>
그런 다음 블레이드 템플릿에 다음 코드를 추가합니다.
<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 중국어 웹사이트의 기타 관련 기사를 참조하세요!