Магкое удаление в Laravel

05.11.2020

Далеко не всегда нудно удалять запись (пост, статью, товар...), а требуется отравить ее в "корзину", это дает возможность ее восстановления.

Для этого в Ларавел предусмотрена возможность "мягкого удаления" (Soft Delete)

В данной заметке я покажу базовый минимум.

Для начала нужно добавить примесь SoftDeletes в нужную Eloquent модель. У меня, для постов, это был файл app/Post.php:

 
namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Flight extends Model
{
    use SoftDeletes;
}

Далее нужно добавить в БД поле deleted_at (оно и является признаком того, что запись удалена).

Создаем миграцию:

 
php artisan make:migration add_deleted_at_to_posts

Содержимое (стоит обратить внимание на название таблицы, у меня это "posts"):

 
<?php

use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;

class AddDeletedAtToPosts extends Migration
{
    /**
     * Run the migrations.
     *
     * @return void
     */
    public function up()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->softDeletes();
        });
    }

    /**
     * Reverse the migrations.
     *
     * @return void
     */
    public function down()
    {
        Schema::table('posts', function (Blueprint $table) {
            $table->dropSoftDeletes();
        });
    }
}

Применяем миграцию:

 
php artisan migrate

И все, далее при вызове Post::find($id)->delete(); запись будет не удалена, а помесчина как удаленная.

Если же нужно вывеси список всех записей, включая удаленные, то нужно использовать метод withTrashed():

 
$posts = Post::withTrashed()->paginate(10);

Существует еще не мало возможностей, с которыми стоит ознакомиться в документации.


Категории: Laravel
Пометки: Laravel Soft Deleting
Яндекс.Метрика