php artisan make:migration add_deleted_at_to_spendings_table --table=spendings
上記をコマンドプロンプトで実行するとspendingsというテーブルに追加する
マイグレーションが作成日時の名前で追加される(deleted_atカラムの記述用)
<?php
use Illuminate\\Database\\Migrations\\Migration;
use Illuminate\\Database\\Schema\\Blueprint;
use Illuminate\\Support\\Facades\\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('spendings', function (Blueprint $table) {
$table->softDeletes();
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('spendings', function (Blueprint $table) {
$table->dropSoftDeletes();
});
}
};
マイグレーションにこのように記述していく
C:\MAMP\htdocs\Laravel_Sample> php artisan migrate 上記をコマンドプロンプトで実行すると spendingsというテーブルにdeleted_atが追加され、論理削除用の関数が使用可能になる
// 対象を削除してリダイレクトする
public function deleteSpend(int $id){
$instance = new Spending;
$record = $instance->find($id);
// forceDeleteで物理削除
$record->forceDelete();
return redirect('/');;
}
// 対象を削除してリダイレクトする
public function SoftDeleteSpend(int $id){
$instance = new Spending;
$record = $instance->find($id);
// deleteで論理削除
$record->delete();
return redirect('/');;
}
あとは、物理削除と論理削除によって上記の2つのコードを使い分けて実装するだけ
delete();が論理削除に変更され、物理削除はforceDelete();になる
// データ物理削除ページ
Route::post('/delete_spend/{id}', [RegistrationController::class, 'deleteSpend'])->name('delete.spend');
// データ論理削除ページ
Route::post('/soft_delete_spend/{id}', [RegistrationController::class, 'SoftDeleteSpend'])->name('softdelete.spend');
ルートを物理、論理削除分追加する
<div class="d-flex justify-content-center mt-3">
<div class="col-md-4 text-center mb-3">
<form action="{{ route('delete.spend', ['id' => $spend['id']]) }}" method="POST">
@csrf
<button type="submit" class="btn btn-danger">削除</button>
</form>
</div>
<div class="col-md-4 text-center mb-3">
<a href="{{ route('edit.spend', ['id' => $spend['id']]) }}">
<button class="btn btn-secondary">編集</button>
</a>
</div>
<div class="col-md-4 text-center mb-3">
<form action="{{ route('softdelete.spend', ['id' => $spend['id']]) }}" method="POST">
@csrf
<button type="submit" class="btn btn-warning">論理削除</button>
</form>
</div>
</div>
あとはフォーム内にボタンを配置すればOK