このブログは未経験からのエンジニア転職やプログラミングの勉強方法などを発信する、現役エンジニアによるエンジニアのためのトータル技術ブログです。ブログとご一緒にSNSのフォローもよろしくお願いします。

Twitterをフォローする

【Laravel】Web アプリをつくりながら Eloquent ORM モデルでのデータベース操作を学ぶ

Laravel
スポンサーリンク
きつね先生
きつね先生

今日はウェブアプリをつくりながらモデルのつかいかたを学んでいきましょう!

わんぽち
わんぽち

モデルをつかうとなにがいいんだわん?

きつね先生
きつね先生

データベースの処理を PHP クラスとしてまとめて直感的にデータベースを扱えるところですかね!

にゃんみ
にゃんみ

SQL 文でデータベースの処理をかかなくてもいいってことかにゃん?

きつね先生
きつね先生

そうですね!データベースの扱いを PHP 構文やファザードを使ってすっきり記述できます!ではやっていきましょう。

 

こんにちは!あっきーです。

Eloquent ORM を使ったデータベースにまつわる操作の方法をまとめます。実際に Web アプリをつくりながらやっていきますので Laravel の基本操作も学べます。

今回はお気に入りの漫画を紹介ページのようなアプリをつくっていきましょう。

 

・Eloquent ORM を使用したモデルでのデータベース操作
・モデルでのデータベースのリレーション設定
・マイグレーション、シーディングでのデータベースの初期設定
・コントローラー、ビューテンプレートの基本的使い方
・フォームリクエストを使用したバリデーション設定
それではさっそくつくっていきましょう。
スポンサーリンク

完成イメージ

 

・表示ページ

 

 

・登録ページ

・バリデーション

マイグレーションで DB をつくる

 

初期のセットアップまでは下記の記事の「データベースを作成する」を参考にしてください。

AWS Cloud9 で Laravel を使ってみる【データベース構築】
こんにちは!あっきーです! Webサイトではデータベースの構築って絶対必要ですよね! でも、データベースってコマンドラインで構築したり、phpMyAdmin などの専用の管理画面から構築したりで結構大変です。データベース専門のエンジ...

 

僕の場合は「test」という名前でデータベースを作成しました。

続いてデータベース内にテーブルを作成します。以下3つのテーブルをコマンドで作成します。

 

・コミックステーブル

ターミナル

 

・作者テーブル

ターミナル

 

・連載誌テーブル

ターミナル

 

たぬきち仙人
たぬきち仙人

Laravel の規約でテーブル名は複数形にするのじゃ。

 

テーブル情報の記述

 

続いてマイグレーションで生成したファイルにテーブルのカラムの情報を記述していきます。

なお省略して「upメソッド」のみの記述ですが、その他の記述はファイル生成時のデフォルトのままで大丈夫です。

 

database/migrations/2019_02_20_144834_create_comics_table.php

 

database/migrations/2019_02_20_144932_create_authors_table.php

 

database/migrations/2019_02_20_145117_create_magazines_table.php

 

マイグレーション実行

 

ターミナル

 

シーディング機能でダミーレコードを用意する

 

まず、以下2つのシーダーファイルをコマンドで作成します。

 

・連載誌テーブルのシーダーファイル

ターミナル

 

・作者テーブルのシーダーファイル

ターミナル

 

シードの作成

 

各ファイルにテーブルのシードを作成する処理を記述していきます。

 

database/seeds/magazinesTableSeeder.php

 

database/seeds/authorsTableSeeder.php

 

シーダーファイルの登録

 

作成したファイルがシーディング時に実行されるよう「database」フォルダ内の「DatabaseSeeder.php」に登録処理を記述します。

 

Database\DatabaseSeeder.php

 

シーディングの実行

 

・コンポーザーからオートローダを再生成

ターミナル

 

・シーディングコマンド

ターミナル

 

無事作成できたかコマンドから確認していきましょう。下記コマンドを1つずつ実行してください。

ターミナル

 

・select * from magazines

 

・select * from authors

 

マイグレーション・シーディングの再実行

 

うっかりスペルミスなどでカラムの情報を間違えて記述してしまった場合は各ファイルの記述を変更した上で下記のコマンドを実行することでマイグレーションとシーディングを再実行することができます。

 

ターミナル

 

ターミナル

 

マイグレーションからシーディングまでの再実行ですのでシーディング以外でまだデータの登録を行っていない初期段階での実行では有効ですが、すでにデータを複数登録していた場合には適していないので使い分けするといいと思います。

 

データベースの表示と登録処理

 

データベースの初期設定は完了しましたのでブラウザでの表示処理を行っていきます。

なお、完成イメージからもわかるように今回はコミックテーブルを表示していますがコミックテーブルにはまだデータが入っていないたブラウザでの表示はされません。

そのため一緒にコミックテーブルにデータを登録していく処理も行います。

のちほど登録処理から追加したデータベースのリレーションを行うために最初は空の状態にしています。

 

モデルの作成

 

以下3つのファイルをコマンドより作成します。

 

・コミックステーブルのモデル

ターミナル

 

・連載誌テーブルのモデル

ターミナル

 

・作者テーブルのモデル

ターミナル

 

たぬきち仙人
たぬきち仙人

テーブル名を複数形にするのに対してモデルは単数形を使うのじゃ

 

コマンドで生成された各ファイルに処理を記述していきます。

・app/Comic.php

 

app/Magazine.php

 

app/Author.php

 

共通の処理ですので簡単に説明をします。

 

モデルと関連しているテーブルを指定します。これでモデルからデータベースを扱えるようにします。

 

データベースでの id は基本は主キーでオートインクリメントでかつ null でないと想定されます。そのため id を保護することにより追加などの処理のさいにデータが null であってもエラーにならず動作させるための記述です。

 

バリデーションの設定

 

コントローラーとビューテンプレートのファイルを作成する前に登録処理時のバリデーションファイルをフォームリクエストから作成しておきましょう。

今回の登録処理時に必須項目なデータはコミック名を記入するテキストボックスです。セレクトボックスは初期値でデータベースの最初のカラムを表示するのでとりあえず大丈夫です。

コマンドから以下のファイルを作成しましょう。

 

ターミナル

 

作成したファイルにバリデーションの処理を記述していきます。

 

app/Http/Requests/ComicRequest.php

 

コントローラーの作成

 

下記コマンドよりコントローラーを作成します。

ターミナル

 

作成されたファイルに処理を記述していきます。

 

app/HTTP/Controllers/ComicController.php

 

ビューテンプレートの作成

 

以下3つのファイルを作成します。フォルダも作成してディレクトリを分けましょう。

 

・ベースレイアウト

resources/views/layouts/comicapp.blade.php

 

・表示ページ

resources/views/comic/index.blade.php

 

・登録ページ

resources/views/comic/add.blade.php

 

Laravel Collective でフォームの作成を行っていますので、基本的な使い方は以下の記事から確認できますので参照してください。

【Laravel】laravelcollective での フォーム作成の方法をまとめてみた
こんにちは!あっきーです! Laravel では Form を作るのに直接 View テンプレートに記述する以外にも方法があります。 それはヘルパー関数を使う方法です。 今回はヘルパー関数を使用した Form の作り方を紹...

 

ルーティングの設定

 

ルーティングを設定します。ルートの記述以外のところは省略しています。

routes/web.php

 

表示確認

 

これで追加ページで追加したデータが表示ページに表示されます。

登録ページから適当にデータをいくつか登録してみてください。

 

・https://ドメイン/comic

 

しかし、作者と連載誌は id で追加しているため数字しか表示されていません。外部キーの id をもとに作者テーブルと連載誌テーブルを紐づけるリレーションの設定を行っていきましょう。

リレーションの設定

 

今回は従テーブルの「コミックテーブル」から関連する主テーブルである「作者テーブル」と「連載誌テーブル」のレコードを取得する必要があります。

テーブルの主従関係は簡単に言えば外部キーを持っている方が従テーブルです。今回でいえば「magazine_id」と「author_id」です。

 

上記のように従テーブル→主テーブルの場合は「belongTo」を使用します。逆に主テーブル→従テーブルのレコード取得の場合は「hasOne」や「hasMany」を使用します。

 

従テーブルである「Comicモデル」を以下のように編集します。

 

app/Comic.php

 

表示ページも編集します。@section('content') 内の@foreach~を以下のように編集します。

 

resources/views/comic/index.blade.php

 

これでComicモデル内のメソッドを使って関連する従テーブルのカラムのデータを参照できるようになりました。

最後にブラウザで表示確認してみましょう。

 

・https://ドメイン/comic

 

完成です。お疲れさまでした!

 

さいごに

最後まで読んでいただきありがとうございます!

Eloquent ORM についての記事ですがアプリをつくりながら Laravel の基本操作を全体的に網羅してみたつもりでしたがいかがでしたしょうか。

今後 Laravel を始める人やなにか作ってみたいひとの参考になれば幸いです。

この記事を気に入っていただけましたらTwitter でもプログラミングのことについてツイートしていますので是非ご一緒にフォローの方もお願いします!

それでは次の記事でまたお会いしましょう!

 

スポンサーリンク
あっきー

元キャバクラ店長から未経験でエンジニアに転職した異端児。

自分の経験を元に、エンジニア転職や未経験からでも挫折しないプログラミングの勉強方法の発信をしてます。

あっきーをフォローする
LaravelMySQLPHP
\良い記事だったらシェアしてね!/
スポンサーリンク
駆け出しエンジニアのつぶやき