Eloquentによるテーブル操作(解説編)

2019/03/12

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 とクエリビルダの違い

Eloquent


$result = App\Student::all();

ポイント

返り値($result)が モデルクラスのインスタンス

 
Eloquent ORM の出力結果

 

クエリビルダ


$result = DB::table('students')->get();

ポイント

返り値($result)が stdClass のインスタンス

 
クエリービルダー の出力結果

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を使っています。気づいたことや新しい発見など情報を発信していきます。メールはこちら

 

-実践知識