laravel_削除機能を実装する

15削除機能を実装する

続いて削除機能を実装していきます。

まずは削除ボタンを編集していきます。今のままではボタンをクリックしてもなにも起こりません。

home.blade.phpに追記

<div class="del_area">
    <form action="{{ asset('/delete') }}" method="post"> // この部分を編集
   @csrf
        <input type="hidden" name="delete_id" value="{{$memo->id}}">
        <input type="submit" value="削除">
    </form>
</div>

次にルートを編集していきます。

web.php

Route::post('/add', 'App\\Http\\Controllers\\MemoController@add');
Route::post('/delete', 'App\\Http\\Controllers\\MemoController@delete'); // 追加

MemoController.phpに追加

public function delete(Request $request)
{
    $delete_id = $request->delete_id;

    $memo_model = Memo::find($delete_id);
    $memo_model->delete();

    return self::show();
}

ではページを読み込んで削除ボタンをクリックしてみましょう。

無事に予定が削除されています。

コードを解説していきます。

<input type="hidden" name="delete_id" value="{{$memo->id}}">この部分ですが、valueにメモのidを入れています。

削除するときにどのメモの削除ボタンが押されたかがわからなければすべてのメモが削除されることになってしまいます。どのメモかを判別する値は必ず一意である必要があります。そこで今回はidを用いています。

メモを1つ追加してデベロッパーツールで確認してみましょう。

サンプルテキストのvalueは1、サッカーのvalueは3になっていますね。

name="delete_id"としているのでコントローラでdelete_idと名前でこのidを取得することができます。

$delete_id = $request->delete_id;コントローラのこの部分です。$delete_idに「サンプルテキスト」の削除ボタンが押されたときは1、「サッカー」の時は3が入ることになります。

また、typeがhiddenになっているためこのidが画面上に表示されることはありません。

では、つづいてコントローラの削除処理を見てみましょう。

先ほど解説した$delete_id = $request->delete_id;この部分で削除対象のメモのidを取得しています。

$memo_model = Memo::find($delete_id);
$memo_model->delete();

削除処理のメインはこの部分です。

1行目のMemo::find($delete_id);ですが、find()メソッドで引数のidと一致するレコードを取得しています。所得したレコードは$memo_modelに格納されています。

その後、delete()メソッドで対象のレコードを削除しています。

これで無事に削除できるようになりました。

では最後に編集できるようにしてみましょう。


投稿日

カテゴリー:

投稿者:

タグ:

コメント

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です