Для удаления модели Eloquent в Laravel можно использовать метод "delete" на её экземпляре. Продемонстрируем способ удаления данных:
<?php
$food = App\Food::find(1)->delete();
?>
Из этого примера можно догадаться, что удалять можно сразу несколько записей, сделав выбоку:
<?php
$deletedRows = App\Food::where('id', '>', 15)->delete();
?>
Если известно значение ключа модели (то есть значение из колонки id), то можно удалить её через метод "destroy". В качестве параметров он может принимать как массив ключей, так и отдельные ключи в разных параметрах:
<?php
App\Food::destroy(1);
App\Food::destroy([1, 3, 8]);
App\Food::destroy(1, 3, 8);
?>
Мягкое удаление
В Eloquent существует возможность сделать "мягкое удаление". При этом запись в базе данных не удаляется, а устанавливается текущая дата в столбец "deleted_at" (он должен быть в таблице). Чтобы включить мягкое удаление, необходимо подключить
Illuminate\Database\Eloquent\SoftDeletes
<?php
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Food extends Model {
use SoftDeletes;
protected $dates = ['deleted_at'];
}
?>
Для добавления столбца "deleted_at" можно использовать метод "softDeletes".
<?php
Schema::table('food', function ($table) {
$table->softDeletes();
});
?>
При запросе модели, которые используют мягкое удаление, в выборку не будут включены данные, которые уже удалены (то есть есть значение в поле "deleted_at"). Если же нужно подтвердить, что экземпляр модели был уже удалён, то необходимо использовать метод "trached":
<?php
if ($food->trashed()) {
// экземпляр уже удалён
}
?>
Иногда после мягкого удаления всё же требуется включить удалённые данные в выборку. Для этого нужно использовать метод "withTrashed" (дословно переводится с англ. как "с удалёнными").
<?php
$foods = App\Food::withTrashed()
->where('id', '>', 59)
->get();
?>
Если нужно отобрать только мягко удалённые данные, то поможет метод "onlyTrashed". То есть будут возвращены только те записи, у которых поле "deleted_at" не является пустым:
<?php
$foods = App\Food::onlyTrashed()
->where('id', '>', 15)
->get();
?>
Как можно заметить, мягкое удаление модели обратимо. Достаточно очистить данные поля "deleted_at". В этом поможет метод "restore":
<?php
App\Food::withTrashed()->where('id', 1)->restore();
?>
Для полного удаления модели из базы данных, необходимо использовать "forceDelete".
<?php
App\Food::withTrashed()->where('id', 1)->forceDelete();
?>