2016-12-29 2 views

답변

2

몇 가지 방법으로이를 수행 할 수 있습니다. 당신이 실제로 원하는 경우

MyModel::deleting(function($model) { 
    DeletedItems::create([ 
     // Your model fields here 
    ]); 
}); 

- 또는

: 다른 테이블에 삭제 된 항목을 삽입 할 경우이 작업이 삭제 이벤트에 대한 발생 할 모델에 model listener 등록 그들이 부드러운 삭제 된 이후 일정 기간 후에 데이터베이스 밖으로 항목을 삭제 나는 Scheduled Task을 사용하는 것이 좋습니다. 소프트 삭제는 시간 스탬프를 제공하므로 작업에서 참조 할 수 있습니다.

예를 들어, 다음은 소프트 한 달 이상 삭제 된 모든 모델을 제거합니다 :

protected function schedule(Schedule $schedule) 
{ 
    $schedule->call(function() { 
     MyModel::withTrashed() 
      ->whereDate('deleted_at', '<', Carbon::today()->subMonth()) 
      ->forceDelete(); 
    })->daily(); 
} 
Laravel은 상자에서이 작업을 수행 할 수 있지만, 쓰기는 열심히하지 않을 수
+0

두 번째 솔루션은 정말 좋은 것처럼 보이지만 일부 데이터베이스에서는 다른 데이터베이스로 옮길 수도 있습니다. 처음부터 삭제하고 데이터를 통계 페이지에 넣기 만하면됩니다. 첫 번째 솔루션은 로깅에 좋다고 생각합니다. – Maximi

+0

왜 둘 다하지 않습니까? 모델 관찰자 대신 작업에서 삭제하려는 레코드를 다른 테이블에 먼저 삽입 한 다음 삭제할 논리를 만듭니다. –