본문 바로가기
프로그래밍/Web

Laravel 4.2 이상, 소프트 삭제

by 사악신 2015. 6. 5.


라라벨 4.2 이상부터 소프트 삭제와 관련하여 약간의 변화가 있습니다. 이전 버전의 경우 클래스 내에 멤버변수로 다음과 같이 선언하여 사용하였다면,


protected $softDelete = true;


4.2 이후 버전부터는 아래와 같이 선언하여 사용합니다.


use Illuminate\Database\Eloquent\SoftDeletingTrait;


class User extends \Eloquent {


use SoftDeletingTrait;



(추가) 5.0 이후 버전부터는 아래와 같이 선언하여 사용합니다.


use Illuminate\Database\Eloquent\SoftDeletes;


class User extends \Eloquent {


use SoftDeletes;


이후, 엘로퀀트 모델에서 delete() 메소드를 호출하여도 실제 삭제되지 않고 deleted_at 에 관련 정보가 추가됩니다. 참~ 마이그레이션으로 테이블 생성시, 아래의 항목을 추가합니다.


$table->softDeletes();


기타 사용 예제는 다음과 같습니다.


$users = User::withTrashed()->where('account_id', 1)->get(); // 소프트 삭제된 레코드도 검색


$user->posts()->withTrashed()->get(); // 소프트 삭제된 레코드도 검색


$users = User::onlyTrashed()->where('account_id', 1)->get(); // 소프트 삭제된 레코드만을 검색


$user->restore(); // 소프트 삭제된 레코드를 복원


User::withTrashed()->where('account_id', 1)->restore(); // 소프트 삭제된 레코드를 복원


$user->posts()->restore(); // 소프트 삭제된 레코드를 복원


$user->forceDelete(); // 진짜 삭제


$user->posts()->forceDelete(); // 진짜 삭제


if ($user->trashed()) // 모델의 인스턴스가 삭제된 항목인지 검사

{

    //

}



반응형

댓글