Удаление данных в Eloquent Laravel

Для удаления модели 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();
?>
MouseDC.ru - хостинг, виртуальный хостинг, покупка доменов, проверка доменов, WHOIS, курсы создания сайтов, вебинары по созданию, курсы разработки сайтов, доработка сайтов, сопровождение сайтов, разработка сайтов, техподдержка сайтов
Cмотрите другие статьи:
Была ли статья полезной?
Была ли эта статья полезна? Есть вопрос?
хостинг для сайтов
Закажите недорогой хостинг Заказать

всего от 290 руб

⇡ наверх