
ソフトデリートを使いたいテーブルに
deleted_atカラムを作る。
既存のcustomersテーブルに追加するという想定で解説。
php artisan make:migration add_softDeletes_to_customers
<?php
//プロジェクトディレクトリ\database\migrations\2022_11_12_120044_add_soft_deletes_to_customers.php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class AddSoftDeletesToCustomers extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('customers', function (Blueprint $table) {
$table->softDeletes();//追記
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::table('customers', function (Blueprint $table) {
$table->softDeletes();//追記
});
}
}
モデルにsoftdeleteを使うことを明言
//customer.php
namespace App\Models;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;//追記
class Customer extends Model
{
use SoftDeletes;//追記
//中略
}
後はdelete()
メソッドで普通に削除するだけでいい。
削除したらdeleted_atカラムに削除日が入る。
削除日が入ってるだけでレコードが物理削除されたときとほぼ同じ動きになる。
Laravel側が勝手に判定してくれるので、「deleted_atカラムがnullなら」とか条件式を自分で書かなくていい。
復活させるときはonlyTrashed()->where('id',該当ID)->restore()
みたいな書き方をする
public function reborn(Request $request,Customer $customer){
$customer = $customer::onlyTrashed()->where('id',$request->id);
return $customer->restore();
}
自力でstatsuってカラムを作って論理削除を実装していた時よりも、動きが速くなった気がする。