Eloquentの基本
ORMとは、データベースのレコードをプログラミング言語のオブジェクトとして扱えるようにするための仕組み。
Laravelには「Eloquent」というORMがある。
ORM
ORMを使うことで、データベースのレコードをPHPのクラス(インスタンス)に変換し、処理ができる。
ORMは異なる構造を変換して繋げる
ORMは、「Object-Relational Mapping」の略。互換性のないデータを自動的に変換して、相互にデータをやり取りできるようにするための仕組み。
ORMにより、データベースから取り出されたレコードはPHPのオブジェクトの形に変換して渡されるようになる。
反対にPHPからデータベースに渡すときは、PHPオブジェクトがレコードに変換して渡される。
相互にデータ構造を変換を変換することで、クラスとデータベースのやり取りが行える。
Eloquentとモデル
Laravelには、「Eloquent」(エロクアント)というORMがある。
「モデル」クラスを定義し、これを利用してデータベース操作ができる。
モデルは、テーブルの内容を定義したクラス。そのテーブル内にあるフィールドをプロパティとして持ち、テーブルとフィールドをモデルクラスとインスタンスを扱う感覚で操作ができる。
モデルを作成する
Eloquentを利用。
テーブルを操作するモデル「abc」を作成。
モデルの作成は、コマンドを使う。カレントディレクトリをプロジェクトフォルダ内に設定し以下のコマンドを実行。
これでモデルが作成。
プロジェクトフォルダ内の「app」フォルダの中に、「abc.php」ファイルが作成。
モデルクラスは、「app」フォルダ内に配置がされるのが基本。
モデルクラスのソースコード
abc.phpを見てみる。デフォルトでは以下のような感じ。
モデルクラスは、Illuminate\Database\Eloquent名前空間にある「Model」を継承したクラスとして作成。
abcクラスは、「test」テーブルを利用するためのクラスとして用意。
abcControllerを作成する
abcモデルを利用するコントローラを作成。
コントローラは、artisan make:controllerコマンドで作成。コマンドで作成。
abcController.phpが作成。作成されたスクリプトファイルを開き、ソースコードを記述。
今回は、indexアクションを用意。
index.blade.phpを作成する
続いて、indexアクション用のテンプレートを作成。「views」内に、「abc」という名前でフォルダを作成。その中に「Index.blade.php」ファイルを作り、以下に記述。
ここでは、$itemsとして受け取ったレコードデータを出力。
ルート情報を追加
Web.phpを開き、以下の文に追記。
記述したら、/abcにアクセス。
abcテーブルにあるレコードが表示。
abcモデルで全レコードを得る
今回作成したabcControllerのindexアクションで行っている処理を見る。
abcクラスの「all」メソッドで全レコードを取得
取得されたレコードは、Illuminate\Database\Eloquent名前空間のCollectionクラスのインスタンスとして得られる。
レコード管理専用のコレクションクラス。foreachなどで値を取り出して処理することができる。
テンプレート側では、コレクションから繰り返しを使ってオブジェクトを取得し、そこからフィールドの値を取り出して表示。
abcクラスにメソッドを追加
モデルクラスにプロパティやメソッドを追加で拡張ができる。
■abcクラスに以下のメソッドを追加する。
IDの検索
レコードIDを使って特定のレコードを取り出すことが可能。
「find」メソッドは、「IDによるレコード検索」。
findは、モデルクラスのメソッド。引数には、検索するID番号を指定。
findは、テーブルの「id」フィールドから指定の番号のものを検索。
/findアクションを作る
/findアクションという検索用のページを作成してfindを使ってみる。
まず、テンプレートを用意。
「views」内の「person」フォルダ内に「find.blade.php」を作成。ソースコードを以下に作成。
abcController
findは、GETアクセスしたときの処理
serachは、POST送信された時の処理
ルート情報
/person/fndにアクセス。
テキストフィールドから番号を入力して検索