Удалить запись, сохраняя в базе данных (Soft Delete)
При удалении записи, её можно сохранять в базе данных, но отмечать что она была удалена. Для этого в базе данных надо создать поле deleted_at (в формате Timestamp, по умолчанию «null»).
И в настройках модели указать параметр SoftDeletes.
# app/models/News.php
use Illuminate\Database\Eloquent\SoftDeletes;
class News extends Model
{
use SoftDeletes;
}
Теперь при удалении записи, она останется в базе данных и будет заполнено поле с датой удаления (если поле заполнено, значит запись была удалена).
Для метода 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();
Добавить мягкое удаление (Soft Delete) через миграцию
Если к текущей базе данных надо добавить мягкое удаление, то это можно сделать через миграцию с помощью метода softDeletes().
// файл с миграцией
return new class extends Migration
{
public function up(): void
{
Schema::table('news', function (Blueprint $table) {
$table->softDeletes(); // добавить мягкое удаление
});
}
public function down(): void
{
Schema::table('news', function (Blueprint $table) {
$table->dropSoftDeletes(); // удалить мягкое удаление при откате
});
}
};
Поддержать автора
Все статьи создаются и поддерживаются одним человеком,
если вам нравится контент, вы можете поддержать автора сайта
