初心者向け。LaravelでCRUDにおける削除機能の作り方
1695 回閲覧されました
みなさんこんにちは、jonioです。
今回は削除機能を実装する方法を説明します。
今回はsummernoteでエディタを作ってそこに書いた内容をビューで反映させてそこに削除機能を実装していますがsummernoteを使っていなくても(通常の投稿なら)実装できる様になっています。
私のやり方に完全に合わせてsummernoteも実装してみようと思う方は↓をどうぞ。
GitのURL
エラー等が出て上手くいかない場合はGitのURLを掲載するのでクローンして使って下さい。
ルーティング
web.phpのコードを↓にします。
37行目に削除のルーティングを書いています。
削除する時はHttpメソッドはdelete(Route::deleteのdeleteの事) にします。
「{id}」はモデルの所で説明します。
次はコントローラーですがweb.phpでコントローラーは「SummernoteController」にしているのでSummernoteコントローラーを作成して下さい。
アクション名を「delete」にしているのでdeleteアクションに記述します。
コントローラー
コントローラーに記述をする前にする事があります。
データベースの内容を消す設定をするのでモデルを作成しますがPostモデルとします。
削除する内容(記事の内容)をbodyカラムに保存するのでマイグレーションファイル(本日の日付_create_posts_table.php)に↓の記述をします。
21行目は記事のタイトル用のカラムなので作成しなくてもいいです。
「php artisan migrate」でデータベースに反映させます。
するとデータベースが↓になりtitleカラムとbodyカラムが作成されているのが確認できます。
↑の赤枠の「title」の左にidカラムがありますがこれがルーティングでの「$id」に当たります。
それではSummernoteController.phpを↓にします。
必要なコードは44行目〜47行目です。
45行目で削除する記事を「$id」で指定して削除します。
記事を保存する時に17行目〜21行目(titleカラムを使わない場合は18行目は必要ないです)を使いますが17行目の「$posts」が記事を削除する時の記述に必要になります。
最後はビューです。
ビュー
show.blade.phpを↓にします。
削除の部分は9行目〜13行目です。
削除機能はaタグではなくてformタグの中に書くというのは知っておきましょう。
また10行目に「@csrf」がありますがその下の行「@method(‘DELETE‘)」を書かないといけないのも知っておきましょう。
9行目に「summernote.delete」がありますがルーティングの「->name(‘summernote.delete‘)」の「summernote.delete」と同じにしないといけません。
9行目の「[‘id‘ => $content->id]」ですがidはコントローラーのdeleteアクションの中にある「$id」に対応していて$content->idの$contentは5行目の$contentの事で$content->idはデータベースのidカラムに当たります。
これで削除機能の完成です。