Удалить запись, помечая пункт «Удалено»
При удалении записи, её можно сохранять в базе данных, но отмечать что она была удалена. Для этого в базе данных надо создать поле deleted_at (в формате Timestamp, по умолчанию «null»).
И в настройках модели указать параметр SoftDeletes
.
# News.php use Illuminate\Database\Eloquent\SoftDeletes; class News extends Model { use SoftDeletes; // указывать до версии Laravel 5.8 protected $dates = ['deleted_at']; }
Теперь при удалении записи, она останется в базе данных и будет заполнено поле с датой удаления (если поле заполнено, значит запись была удалена).
Для метода DB::table()->delete()
данный тип удаления не работает (т.е. будет удаляться запись, вместо того, чтобы отмечать, что она была удалена).
Выборка записей вместе с удалёнными
Выбрать записи вместе с удалёнными можно через метод withTrashed()
.
// выборка записей вместе с удалёнными News::where(['category_id' => 4])->withTrashed()->get();
Также можно выбрать только удалённые записи через метод onlyTrashed()
.
// выборка только удалённый записей News::where(['category_id' => 4])->onlyTrashed()->get();
Восстановить удалённую запись
Восстановить удалённую запись можно через метод restore()
.
// Восстановить удалённую запись News::where(['id' => 3])->restore();
Окончательно удалить запись
Удалить запись (активную или помеченную как удалённую) из базы данных можно через метод forceDelete()
.
// Удалить запись из базы данных News::where(['id' => 3])->forceDelete();
Поддержать автора