テーブルのレコードを物理削除ではなく、論理削除したいことがあります。Laravelにはその仕組が備わっています。
Laravel 6でレコードを論理削除する
マイグレーションを修正する
“deleted_at”というプロパティを追加します。マイグレーションを修正します。
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->bigIncrements('id');
$table->integer('user_id')->comment('ユーザーID');
$table->string('title')->comment('タスクのタイトル');
$table->string('description')->comment('タスクの説明');
$table->date('registration_date')->comment('登録日');
$table->date('expiration_date')->comment('期限日');
$table->date('completion_date')->nullable()->comment('完了日(nullのときは未完了)');
$table->softDeletes();
$table->timestamps();
});
}
“$table->softDeletes();”を追記しています。
マイグレーションを実行する
下記を実行すると、全てのテーブルが削除され、再生成されます。
php artisan migrate:refresh
モデルを修正する
モデルに”Illuminate\Database\Eloquent\SoftDeletes”を使ってソフトデリート(論理削除)するように設定します。
use Illuminate\Database\Eloquent\SoftDeletes; // 追記
class Task extends Model
{
use SoftDeletes; // 追記
}
上記以外、その他の箇所を修正することなく、論理削除できるようになります。
論理削除したレコードは、「削除されたこと」になっているので、クエリの結果に含まれなくなります。