2020/04/27
Laravel でデータベースのテーブルを操作するには Eloquent を使います。
動的サイトの構築において、一番主要な部分ですので、ここをしっかり理解しておかないと後々困ることになります。
今回はおさらいの意味を含めて Eloquent によるテーブル操作についてエントリーします。
INDEX
Eloquentとは(おさらい)
テーブル上の1レコードをPHPのオブジェクト一つに対応させます。
オブジェクトの操作や指定により、テーブル操作をやってしまおうというものです。
// コントローラ
$user = User::find(7);
結果が一件の場合は、$return->フィールド名
でアクセスできます。
// ビュー
echo $user->name;
結果が複数の場合は、foreach
でループ処理をします。
// コントローラ
$user = User::all();
// ビュー
foreach($users as $user)
{
echo $user->name;
}
Eloquentでよく使うクエリーメソッド
実際のテーブル操作では以下のメソッドをよく使います。
メソッド名 | 役割 |
---|---|
find() | 主キーを指定して検索 |
where() | 検索条件を指定 orWhere や引数でAND、OR検索ができる |
count() | 件数を取得する |
first() | データを1件だけ取得する |
toArray() | データを配列に変換 |
toJson() | データをJsonに変換 |
save() | データ挿入による保存、データ更新による保存 |
delete() | データの削除 |
ORM(Eloquent ORM)とは
Eloquent は ORM(Object Relational Mapping)です。
・モデルとそのデータを表す仕組み
・モデル間の関連性を表す仕組み
・オブジェクト指向の手法でDB操作を実行する仕組み
基本的に、1つのクラスがDBの1テーブルに対応しています。
・クラスの属性は、テーブルの各カラムに対応
・クラスの1インスタンス(オブジェクト)は、DBの1レコードに対応する。
クラスとテーブルの対応には、名前に関する規約が利用されます。
・(例)テーブル名が books の場合、クラス名は Book
Eroquent とDBファサードの違い
Eloquent
$result = App\Student::all();
返り値($result)が モデルクラスのインスタンス
Eloquent ORM の出力結果
DBファサード
$result = DB::table('students')->get();
返り値($result)が stdClass のインスタンス
クエリービルダー の出力結果
PHPであらかじめ定義されているクラスで、特に何か定義しなくても使用することができます。次のように、クラスが無くとも、とりあえずオブジェクトを作りたいときに便利に使える代物です。
<?php
$obj = new stdClass;
$obj->name = "php";
$obj->type = "default";
?>
データを配列ではなく、オブジェクトの形で保存したい場合などに使います。
オブジェクトにすることで、$obj->name
のような形でデータを記述できます。
クエリビルダでは Eloquent と違ってクラスが定義されていないので、抽出したレコードはこの形式で保存されます。
Eloquentを使う理由
上記を見てもらってもわかるように Eloquent とクエリビルダの出力結果の通り、結果は同じです。
ではなぜLaravelエンジニアは好んで Eloquent を使うのでしょうか?
それは以下のメリットがあるからです。
メリット
- リレーションを定義できる
- イベントハンドラを定義できる
- JSONレスポンスの生成、およびそのための加工が宣言的にできる
- ルートモデルバインディングを利用できる
- 再利用性が高い
Eloquent でのテーブル結合はリレーションの定義で行います。Many to Many 系以外で JOIN を使ってくれません。
このことからLaravelエンジニアはテーブル操作で Eloquent を使います。
Eloquent によるテーブル操作についての解説は以上になります。
仕事で Laravel を使っています。気づいたことや新しい発見など情報を発信していきます。問い合わせはこちら。