Далеко не всегда нудно удалять запись (пост, статью, товар...), а требуется отравить ее в "корзину", это дает возможность ее восстановления.
Для этого в Ларавел предусмотрена возможность "мягкого удаления" (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();
});
}
}
Применяем миграцию:
И все, далее при вызове Post::find($id)->delete(); запись будет не удалена, а помесчина как удаленная.
Если же нужно вывеси список всех записей, включая удаленные, то нужно использовать метод withTrashed():
$posts = Post::withTrashed()->paginate(10);
Существует еще не мало возможностей, с которыми стоит ознакомиться в документации.