목차
Laravel 버전
- Laravel 8.x
소프트 삭제와 완전 삭제의 차이
먼저, 소프트 삭제란 무엇인가에 대해 간단히 설명하자면
소프트 삭제는 논리 삭제라고도합니다.
실제로 데이터를 삭제하지 않고, 「삭제한 것처럼 보이고 있는」 상태입니다.
Laravel에서는 delete_at 열에 날짜가 들어간 상태입니다.
반대로 완전히 삭제된 상태를 물리적 삭제라고 합니다.
이것은 데이터 자체가 데이터베이스에서 사라져 버린 상태입니다.
따라서 소프트 삭제는 복구 할 수 있지만 완전 삭제는 복구 할 수 없습니다.
일반적인 삭제
delete 메소드 사용.
$user = App\User::find(1); $user->delete();
삭제할 모델의 키를 알고 있다면,
모델을 가지고 오지 않아도 destroy 메소드로 삭제할 수 있습니다.
App\User::destroy(1); // 복수 지정도 가능 App\User::destroy(1, 2, 3); App\User::destroy([1, 2, 3]);
소프트 삭제
물리적 삭제가 아닌 논리 삭제입니다.
DB 테이블에 deleted_at 열을 추가해야합니다.
먼저 모델을 작성하는 방법
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; class Flight extends Model { use SoftDeletes; }
이제 delete 메소드를 사용하면 deleted_at 열에 현재 시간이 들어 갑니다.
모델 가지고 올 때도 deleted_at이 NULL이 아니면 쿼리 결과에 포함되지 않습니다.
지정된 모델 인스턴스가 소프트 삭제 되고 있는지를 확인하려면 , trashed 메소드를 사용합니다.
if ($user->trashed()) { // }
소프트 삭제 모델도 검색 결과에 포함
검색 결과에 소프트 삭제된 모델도 같이 포함하는 경우, withTrashed 메소드를 사용합니다.
$users = App\User::withTrashed()->get();
소프트 삭제된 모델만 가져 오려면 , onlyTrashed 메소드를 사용합니다.
$users = App\User::onlyTrashed()->get();
소프트 삭제 복구
소프트 삭제 된 모델을 원래대로 복구하고 싶은 경우, restore 메소드를 사용합니다.
$user->restore();
여러 소프트 삭제 모델을 한 번에 복구하려면, withTrashed 메소드를 추가합니다.
App\User::withTrashed()->restore();
물리적 삭제(완전히 삭제하고 싶을 때)
물리 삭제하고 싶을 때는 forceDelete 메소드를 사용합니다.
$flight->forceDelete();
사용방법은 비교적 간단하고 직관적으로 이해하기 쉽습니다.