IT関連

Laravel 生成読取更新削除 CRUD全手順 私の備忘録

投稿日:2020年8月27日 更新日:

事前注意事項

今回はXAMPPを使うので、インストールするパスはc:\xampp\htdocsとする。

ゆえに以下コードで>になっているものは、C:\xampp\htdocs>という意味。

コードの上は公式、下が実際に入力したコードとする。

 

Laravelのインストール

  • 実行したカレントディレクトリにプロジェクト名のフォルダが作られ、その中にLaravel一式が入れられる。
  • –prefer-distは現行バージョンを取得する意味だとか聞いたことある
  • プロジェクト名を付けなければlaravelになった。laravel/laravelにしたから?

 

Laravelのバージョン

Laravelがインストールされているディレクトリで実行すること。

 

データベース作成

データベースは作っておく。データベース名は「xampp」にする。

 

ダミーデータを入力する

 

権限付与

 

データベース接続

.envファイルを編集する。

 

コントローラの作成

これでLaravelapp/app/Http/Controllers直下に作成される。

 

ルーティングの設定

routes/web.php内に記入

 

コントローラーからとりあえずDBにアクセス

 とりあえずvar_dumpで接続できるか確認。

 

var_dumpの結果

 

コントローラーからViewへ受け渡し

連想配列として受け渡す。第二引数は配列にすること。

 

コントローラはこういう形。

 

View側はこういう形。resources/viewsディレクトリにhelloディレクトリを作りそこに置く。ファイル名はindex.blade.php

 

結果はこんな感じ。

新規作成を作る

 

index.blade.phpに追記

</table>の後ろに追記

 

こんな感じになる。

web.phpに追記する

新規登録のボタンを押したルーティングを追加する。

 

HelloController.phpに追記する

function indexの下に追記する

ちゃんとコントローラークラスの中に入るように注意。

 

add.blade.phpを作成する

置き場所はindex.blade.phpと同じ場所。resources/views/hello直下。

フォームのアクションをhello/createにして、createメソッドを実行するようにする。

postのときはcsrf_field()を入れなければ403エラーになので必ず入れること。

 

新規登録のボタンを押下してadd.blade.phpにアクセスするとこんな感じ

web.phpに追記する

下記を追加する。

 

すると、こうなる。

 

パスは同じaddでいい。

getでアクセスした場合は、addメソッドでコントローラーに書かれたadd.blade.phpを表示する。

postでアクセスした場合は、createメソッドでコントローラーに書かれたDB::insertを実行する。

 

getは別画面からこの画面にアクセス。postはこの画面からこの画面にアクセス。

 

HelloControllerにcreateメソッドを追加する

入力した値を受け継いで、データベースに登録する処理です。

データベースに登録した後はindex表示のhelloにredirectする。

viewとredirectの違いは、

  • viewは引数に明記されたviewテンプレートを呼び出す
  • redirectはweb.phpのルートにアクセスしたことになる。

 

更新処理を作る

indexで一覧表示されたものをクリックすると更新画面に飛んで、打ち替えたあと更新ボタンでデータベースを更新するものを作ります。

 

web.phpに追加する

今回はgetとpostを一気に書きます。

getは更新用の画面を表示する、postは更新ボタンでDBを更新する用です。

さっきとまったく同じです。

 

index.blade.phpに/hello/editへのリンクを追記する

IDにリンクをつけクリックできるようにします。

 

HelloControllerにeditメソッドを追加する

limit 1にして1レコードしか渡さないようにする。

 

正式には下記のようにするらしい。

limit 1などせずに、view側で{{$form->name}}などとする。

 

$items配列の[0]だけを渡して、view側で1件だけを処理している。

もし上記のように’items’ => $itemsで渡すと受け渡る配列は2次配列になるので、@foreachで処理しなければならない。

今回は@foreachで処理する。

これで処理するのはスマートではないのはわかるが、正直のところ‘form’ => $items[0]とする意味が理解できないので今回はこれは使わない。

 

 

edit.blade.phpを作成する

基本的にaddとあまり変わらない。

 

画面はこうなる。

更新ボタンを押すと/hello/editへpostして、その先でDBを更新するメソッドが動く。

IDは主キーにより変更できないので、画面上にはIDの枠はない。

しかしDBを更新するキーとして更新プログラム側にIDは受け渡してあげないといけない。

そのため<input type=”hidden”>を使って非表示の値を作ってあげる。

 

HelloControllerに更新処理updateを追加する

updateするに必要なすべてを$requestで受け取り、$param配列に入れてSQL文に渡す。

終わったらredirectでindexのhelloに戻ってくる。

 

削除処理を作る

更新処理で作ったindex一覧のリンクeditのview内に削除ボタンを設ければいいと思う。

 

edit.blade.phpに追加する

更新画面の中の</form>の後に削除ボタンを設ける。

これも微妙な書き方だと思う。

 

前提として、削除するなら削除メソッド側にIDを渡してあげないといけない。

それをクエリー文字列で渡している。

クエリー文字列とは?id=というやつ。

 

下記のようにすれば

更新ボタンを押しても、aとbuttonで作られた削除ボタンを押しても、formのactionが実行されてしまう。

なので削除ボタンを押しても、/hello/editの方に飛ぶ。

 

画面はこんな感じ。こうなってくると既存更新ではなく、更新削除画面の方がいいのかもしれない。

web.phpに追加する

上記で削除ボタンを押したら/hello/delに飛ぶようにしている。

 

HelloControllerにdeleteメソッドを追加する

クエリ文字列はRequestで受け取れるので他と同様。

DBクラスのdeleteメソッドも他と同じような感じ。

 

以上。自分のレベルで自力で作ればこうなった。

他にいい書き方があるはずなので、これから探す予定。

スポンサーリンク




スポンサーリンク




-IT関連
-,

執筆者:


comment

Your email address will not be published. Required fields are marked *

関連記事

git Laravelで引っ越しの備忘録

自分の備忘録です。正直自分にわかるようにしか書いていません。 真似て事故っても責任は持てませんのでご了承ください。でも何かの参考になれば幸いです。   開発環境は自席WindowsPCのXA …

WindowsからMacに切り替えてお仕事をしよう

会社が私にMacBookProを買ってくれたので早速使おうと思ったけど、ずっと仕事でWindowsを使っていた私にとっては、かなり使いにくい。 といって開かずにいたら、かれこれ半年が経過してしまった。 …

PHP 設定関連

php.ini ERROR_REPORTING デフォルトのエラー表示が過剰なのでいつも変更している。 デフォルトは、error_reporting=E_ALL & ~E_DEPRECATED …

DocuWorks6でプリンターが消える不具合

早いものでDocuWorksのバージョンは9になったそうです。   今はシステムエンジニアに転籍したので使わなくなりましたが、当時はとても重宝させて頂きました。 私が使っていたころはバージョ …

GoogleAdsense審査基準について

このブログはGoogleAdsense広告を使用させていただいております。   GoogleAdsense(グーグルアドセンス)とはこんなブログの横などに設置する広告のことです。 &nbsp …

Adsense広告




文字で検索

人気記事

なぜだか人気記事

読んでほしい順に