Laravel 소프트 삭제

 

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();

 

 


사용방법은 비교적 간단하고 직관적으로 이해하기 쉽습니다.

 

 

 

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤