В Eloquent ORM от Laravel мягкое удаление — это удобная функция, которая позволяет разработчикам помечать записи базы данных как «удаленные», не удаляя их фактически из базы данных. Однако в некоторых случаях вам может потребоваться выполнить окончательное удаление, при котором запись полностью удаляется из базы данных. В этой статье мы рассмотрим различные методы окончательного обратимого удаления в Laravel Eloquent, а также приведем примеры кода.
- Использование метода
forceDelete:
МетодforceDelete— это встроенный метод, предоставляемый Laravel Eloquent, который позволяет безвозвратно удалить запись. При вызове экземпляра модели Eloquent он полностью удаляет запись из базы данных.
$user = User::find($id);
$user->forceDelete();
- Переопределение метода
delete:
Вы можете переопределить методdeleteв своей модели Eloquent, чтобы предоставить собственную реализацию для окончательного удаления. По умолчанию методdeleteвыполняет обратимое удаление, но вы можете изменить его, чтобы вместо этого выполнить окончательное удаление.
use Illuminate\Database\Eloquent\Model;
class User extends Model
{
// ...
public function delete()
{
$this->performPermanentDelete();
}
protected function performPermanentDelete()
{
$this->delete();
// Perform additional permanent deletion logic here
}
}
- Использование построителя запросов.
Если вы предпочитаете использовать построитель запросов вместо моделей Eloquent, вы можете добиться окончательного обратимого удаления, используя фасадDB. ФасадDBпредоставляет методdelete, который можно использовать для окончательного удаления записей.
use Illuminate\Support\Facades\DB;
DB::table('users')->where('id', $id)->delete();
- Пользовательские триггеры базы данных.
Другой подход к обеспечению окончательного обратимого удаления — использование триггеров базы данных. Триггеры позволяют вам определять настраиваемые действия, которые будут выполняться при возникновении определенных событий в базе данных. Вы можете создать триггер, который будет выполнять окончательное удаление при попытке обратимого удаления.
Пример триггера PostgreSQL:
CREATE OR REPLACE FUNCTION permanent_soft_delete()
RETURNS TRIGGER AS $$
BEGIN
DELETE FROM users WHERE id = OLD.id;
RETURN NULL;
END;
$$ LANGUAGE plpgsql;
CREATE TRIGGER users_permanent_soft_delete
BEFORE DELETE ON users
FOR EACH ROW
WHEN (OLD.deleted_at IS NOT NULL)
EXECUTE FUNCTION permanent_soft_delete();
В этой статье мы рассмотрели различные методы окончательного обратимого удаления в Laravel Eloquent. Мы обсудили использование метода forceDelete, переопределение метода delete, использование построителя запросов и реализацию пользовательских триггеров базы данных. Используя эти методы, вы можете эффективно управлять безвозвратным удалением в своих приложениях Laravel.
Не забудьте выбрать метод, который лучше всего соответствует требованиям вашего проекта и соответствует соглашениям Laravel для обеспечения плавной интеграции. Постоянное обратимое удаление дает вам возможность гибко обрабатывать удаление данных, сохраняя при этом целостность данных в вашем приложении.