データの削除

データの削除

データの削除では、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;

無事削除されていれば成功です。

今回はデータの削除を行いました。これで一通りのデータベースの操作ができたと思います。次回はダミーデータを用いてデータの検索について学習していきます。

コメントを残す

CAPTCHA