MySQLと連動させてCRUDを作成するアプリケーションを作る際に基本的な機能となるCRUDをLaravelとMySQLを使って作成してみます。Deleteの略になっています。データの一覧表示、新規データの作成、データの表示、データの更新、データの削除。アプリケーションには必須と言える機能です。現在はシングルページアプリケーション(SPA)が主流となりつつあります。LaravelとVue.jsなどを組み合わせてSPAでサイトを構築する場合も多いと思いますが、ここでは、SPAではなく、ページ遷移のあるベーシックなサイトを作ります。LaravelとMySQLを連動させる方法は下記の記事を御覧ください。今回は自分の持ち物を管理するDBを作成してみます。パソコン、スマホ、バッグ、ノート、車などを登録するイメージです。データベースのテーブル名はitems,Laravelのモデル名はItemとします。2020_04_12_150100_create_items_tableこれによりプロジェクトルートのappディレクトリの中に「Item.php」というモデルファイルが生成されます。databaseのmigrationsディレクトリの中に「2020_04_12_150100_create_items_table」というマイグレーションファイルが生成されます。これらを編集していきます。$fillableを設定します。$fillableはLaravel独自の機能となります。Laravelはデーターベースとやり取りする仕組み「Eloquent」によってDB操作が簡単にできるようになっています。基本的なDB操作は自分でSQL文を書かなくても、Eloquentのメソッドで実行することができます。勝手にテーブルにアクセスできるとトラブルの原因になったりするので、デフォルトではアクセスに制限がかけられています。$fillableです。['name','memo',];$fillableの後の括弧の中はフィールド名をシングルクォーテーションで囲み、カンマで区切って記載します。$fillableは指定したものを利用可能とするのでホワイトリスト形式になります。これとは逆にブラックリスト形式での登録も用意されています。アクセスOKのカラムが少ない場合はホワイトリスト形式、アクセスOKのカラムが多い(アクセス禁止が少ない)場合はブラックリスト形式のほうが使いやすいです。ブラックリストの場合は下記のように記載します。$fillableと$guardedのどちらかが設定されていればOKです。「2020_04_12_150100_create_items_table.php」を開いて編集します。down(){Schema::dropIfExists('items');}}カラムを2つ追加したいので、$table->string(‘name’);$table->string(‘memo’);を記載します。seconds)MySQLでテーブルが作られたか確認してみます。「Eloquent」でデータを追加、更新するとこの値(タイムスタンプ)が自動に記録される仕組みになっています。CRUD対応になります。--resourceルーティングroutesディレクトリのweb.phpにルーティングを記載します。'ItemController');この一行をweb.phpに記載するだけで、下記のようなルーティングが行われるようになります。route:listコントローラーの編集コントローラー内には下記のアクションが作られています。index()create()store()show()edit()update()destroy()下記のようにアクションの中身を記載していきます。$id)->delete();}}Viewファイルの作成コントローラーを作成したら、今度は表示部分のViewを作っていきます。value="削除"></form></th></tr>@endforeach</table>ページの上部に「新規追加」ページのリンクを作成。リンク先は{{route(”}}の形式で設定しています。これで「ドメイン名/item/create」のリンクが生成されます。@endforeachで一覧を表示しています。$itemsの配列データがViewに送られてきています。}}という形でデータを取り出すことができます。削除ボタンのところはLaravelの疑似フォームメソッドを使っています。method=”POST”>の部分は「ドメイン名/item/destroy」にリンクされ、itemのIDが送られます。(IDが送られるので、該当するIDのデータが削除される仕組みです)@method(‘DELETE’)もLaravel独自のメソッドです。LaravelのHTTPメソッドはGETとPOSTのみの対応になっています。PUTとDELETEはデフォルトでは使用することができません。フォムの中にメソッド名を指定して、擬似的にPUTやDELETEを実行できるようにする仕組みです。今回はDELETEを使います。※PUTの場合は@method(‘PUT’)を使います。フォームタグのすぐ下にある「@csrf」はセキュリティ対策のおまじないです。CSRFはクロス・サイト・リクエスト・フォージェリの略です。信頼できるユーザーになりすまして、悪意のある人が許可されていないコマンド等を実行してしまうことです。これを防ぐために@csrfを記載します。これでリクエストに含まれる「_token」とセッションに含まれる「token」が同等かを確認するようになります。表から届くデータと、裏側から届くデータを確認しているようなイメージです。resources/views/create.blade.php新規にデータを登録する画面です。value="登録"></form>こちらはシンプルなフォームになります。フォームは前項で説明したものと同じ使い方になります。バリデーションで弾かれたとき、直前に入力していたデータが表示されるようになります。バリデーションで弾かれた時にデータが消えてしまうのはユーザビリティ上良くないのでこのような対処をしてユーザビリティを良くすることができます。resources/views/show.blade.phpこちらは個々のデータの確認画面です。シンプルにデータを表示しているだけですので、今までの内容で理解できますね。}}</td></tr></table>resources/view/edit.blade.php編集画面です。value="編集"></form>ここでは@method(‘PUT’)を使っています。データの更新のときは@method(‘PUT’)を利用すると覚えておきましょう。ドメイン名/item/{id}/editリダイレクトこれで基本的なページが出来上がり、動作もうまくいきました。新規登録、更新などをした後に真っ白いページになってしまいます。それらを回避するためにリダイレクトを設定します。新しいデータを登録(create)し、登録するとstoreの処理になります。このアクションの部分にリダイレクトを設定します。リダイレクト先は一覧(index)にします。アクションに処理を設定したら、Viewにも表示の処理を記載します。'データが登録されました');処理がうまくいったことをユーザーに知られるためにwithを使いコメントを表示させています。'編集完了しました');直前のページにリダイレクトしたい場合はback()が便利です。back()を設定するだけで自動的に元のページに戻ります。back()->withInput();にすると送信されたデータが自動的にセッションに格納され、前のページでoldを設定しておくとそこに表示されるようになります。