データの削除
データの削除では、HTTPメソッドのDeleteを使用します。
Laravelでのデータ削除
データ削除用のビューを新たに追加したいと思います。delete-item.blade.phpを作成し、以下のようなソースコードを記述します。
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Itemの削除</title>
</head>
<body>
<form action="{{ route('items.destroy', $item) }}" method="POST">
@csrf
@method("DELETE")
<p>name</p>
<p>{{ $item->name }}</p>
<button type="submit">削除</button>
</form>
</body>
</html>
@methodでDeleteメソッドを利用することを指定しています。
次にコントローラーに以下のメソッドを追加します。
public function deleteItem(Item $item) {
return view("delete-item", compact("item"));
}
public function destroyItem(Request $request, Item $item) {
$item->delete();
return redirect()->route("items.show");
}
deleteItemメソッドはdelete-itemビューを表示するためのメソッドです。URLからItemモデルを取得し、それをビューに渡しています。destroyItemメソッドはitemsテーブルからデータを削除するメソッドです。Itemモデルのdeleteメソッドを使用しています。データの削除処理は以下のような記述も可能です。
public function destroyItem(Request $request, Item $item) {
$item->destroy($item->id);
return redirect()->route("items.show");
}
前者では、deleteメソッドを呼び出すだけでデータを削除できます。後者では、destroyメソッドに削除するデータのidを渡す必要があります。前者はイベントが発生しますが、後者はイベントが発生しません。どちらを使用しても構いませんが、ここでは後者を使用します。
次にルーティングを記述します。web.phpに以下のように記述します。最初の行は以前設定したルーティングに名前を付けているので、新たに記述するのではなく、書き換えてください。
Route::get("/show-items", [HelloController::class, "showItems"])->name("items.show");
Route::controller(HelloController::class)->group(function () {
Route::get("/delete-item/{item}" , "deleteItem")->name("items.delete");
Route::delete("/delete-item/{item}", "destroyItem")->name("items.destroy");
});
一行目は、destroyItemでリダイレクトするために、http://localhost/showw-itemsに名前を追加しました。
http://localhost/delete-item/1にアクセスし、表示された画面の削除ボタンを押します。itemの一覧表示画面に遷移すれば成功です。MySQLにログインして、以下のコマンドで、データが削除されているかも確認してください。
select * from items;
無事削除されていれば成功です。
今回はデータの削除を行いました。これで一通りのデータベースの操作ができたと思います。次回はダミーデータを用いてデータの検索について学習していきます。