##概要
Laravelで論理削除の実装方法です。
$table->softDeletes();を追加すれば論理削除を実装できる
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateTasksTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('tasks', function (Blueprint $table) {
$table->id();
$table->integer('user_id')->unsigned();
$table->text('task');
$table->timestamps();
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('tasks');
}
}
deleted_atが追加されたことを確認
+------------+---------------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------+---------------------+------+-----+---------+----------------+
| id | bigint(20) unsigned | NO | PRI | NULL | auto_increment |
| user_id | int(10) unsigned | NO | | NULL | |
| task | text | NO | | NULL | |
| created_at | timestamp | YES | | NULL | |
| updated_at | timestamp | YES | | NULL | |
| deleted_at | timestamp | YES | | NULL | |
+------------+---------------------+------+-----+---------+----------------+
modelの設定
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;
class Task extends Model
{
use SoftDeletes;
protected $dates = ['deleted_at'];
protected $fillable = [
'task',
];
}
モデルの削除
$task = Task::find(1);
$task->delete();
以下のようにuser_idとjoin結合をすると論理削除済みのデータも取得してしまう。
$tasks = User::join('tasks', 'users.id', '=', 'tasks.user_id')->get();
以下のようにwhere句でdeleted_atカラムがnullのものを指定すれば、論理削除済みのデータ以外を取得できます。
$tasks = User::join('tasks', 'users.id', '=', 'tasks.user_id')->where('deleted_at', null)->get();