В Laravel управление удаленными записями упрощается благодаря концепции обратимого удаления. Мягкое удаление позволяет помечать записи как удаленные, не удаляя их из базы данных. Эта функция особенно полезна, если вы хотите сохранить данные для целей аудита или предоставить возможность восстановления удаленных элементов. В этой статье мы рассмотрим различные методы реализации обратимого удаления в Laravel с помощью миграции базы данных и попутно предоставим примеры кода.
- Добавление столбца обратимого удаления в таблицу.
Чтобы включить обратимое удаление для конкретной таблицы, начните с добавления столбцаdeleted_at, допускающего значение NULL, в файл миграции таблицы. В этом столбце будет храниться временная метка удаления при обратимом удалении записи. Вот пример добавления столбца обратимого удаления в таблицуusers:
Schema::table('users', function (Blueprint $table) {
$table->softDeletes();
});
- Включение обратимого удаления в модели.
После добавления столбцаdeleted_atв таблицу необходимо включить функцию обратимого удаления в соответствующей модели Eloquent. Для этого используйте признакSoftDeletes, который предоставляет необходимые методы для мягкого удаления и восстановления записей. Например, рассмотрим модельUser:
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class User extends Model
{
use SoftDeletes;
// ...
}
- Мягкое удаление записей.
Чтобы мягко удалить запись, просто вызовите методdelete()в экземпляре модели. В столбцеdeleted_atбудет установлена текущая временная метка:
$user = User::find(1);
$user->delete();
- Восстановление обратимо удаленных записей.
Обратно удаленные записи можно восстановить с помощью методаrestore()в экземпляре модели:
$user = User::withTrashed()->find(1);
$user->restore();
- Получение обратимо удаленных записей:
Чтобы получить обратимо удаленные записи, используйте методwithTrashed()в экземпляре построителя запросов модели:
$softDeletedUsers = User::withTrashed()->whereNotNull('deleted_at')->get();
- Безвозвратное удаление записей:
Если вы хотите навсегда удалить обратимо удаленную запись, вы можете использовать методforceDelete():
$user = User::withTrashed()->find(1);
$user->forceDelete();
Мягкое удаление в Laravel предоставляет удобный способ обработки удаленных записей без их окончательного удаления из базы данных. В этой статье мы рассмотрели процесс реализации мягкого удаления с помощью миграции базы данных и продемонстрировали, как выполнять мягкое удаление, восстановление, извлечение и окончательное удаление записей. Используя функцию обратимого удаления Laravel, вы можете обеспечить целостность данных и вести полный контрольный журнал вашего приложения.