Мягкое удаление в моделях Eloquent в Laravel
Кроме обычного удаления Eloquent также может
мягко удалять записи. Мягкое удаление означает,
что запись на самом деле остаётся в базе данных,
но в таблице для записи устанавливается поле
deleted_at.
Сначала добавим колонку миграцией:
<?php
Schema::table('users', function (Blueprint $table) {
$table->softDeletes();
});
?>
Затем в модели подключим трейт
SoftDeletes:
<?php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
}
?>
Теперь обычный delete не удалит
строку из таблицы, а только проставит
deleted_at. Такие записи сами
не попадут в выборку:
<?php
$user = User::find(1);
$user->delete();
?>
Чтобы увидеть и мягко удалённые записи,
используйте withTrashed:
<?php
$users = User::withTrashed()->get();
?>
Восстановить запись можно методом
restore:
<?php
$user = User::withTrashed()->find(1);
$user->restore();
?>
Окончательно удалить из базы -
методом forceDelete:
<?php
$user->forceDelete();
?>
Реализуйте мягкое удаление юзеров:
миграция, трейт в модели, удаление
через delete.
Реализуйте восстановление удалённых
юзеров через restore.
Выведите список всех юзеров, включая мягко удалённых.