2016-12-29 2 views
0

Возможно ли работать с Laravel, что он может иметь мягкие удаленные элементы в другой идентичной таблице журналов? Все мягкие удаленные файлы в другой таблице.Laravel - soft delete - переместить сообщения в другую таблицу

Я хочу создать в журнале таблицу Планировщик событий (http://dev.mysql.com/doc/refman/5.6/en/events-overview.html), чтобы удалить все данные через некоторое время.

+1

Laravel не может сделать это из коробки, но она не может быть трудно написать это сам. – Jerodev

ответ

2

Несколько различных способов достичь этого. Если вы хотите, чтобы вставить удаленные элементы в другую таблицу, то зарегистрировать model listener на моделях, которые вы хотите это действие произойдет в случае на удаляете:

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

--или--

Если вы хотите на самом деле удалять элементы из базы данных через определенный промежуток времени, так как они были мягкими. Я бы предложил использовать Scheduled Task. Поскольку мягкое удаление дает вам отметку времени, вы можете ссылаться на нее в своей задаче.

Например, следующие будут удалены все модели, которые были мягкие удалены более чем на месяц:

protected function schedule(Schedule $schedule) 
{ 
    $schedule->call(function() { 
     MyModel::withTrashed() 
      ->whereDate('deleted_at', '<', Carbon::today()->subMonth()) 
      ->forceDelete(); 
    })->daily(); 
} 
+0

Второе решение кажется действительно приятным, но переезд в другую базу данных также будет прекрасным для некоторых статистических целей. Просто удалите сначала и поместите данные на страницу статистики. Первое решение кажется приятным для ведения журнала, о котором я думаю. – Maximi

+0

Почему бы не обойтись? Вместо наблюдателя модели в задаче создать логику, чтобы сначала вставить записи, которые вы собираетесь удалить в другую таблицу, а затем удалить их. –

Смежные вопросы