MVCを採用しているフレームワークは、ORMという仕組みがを用いてDBへの問い合わせを行うのが一般的です。
今回は、Laravelに採用されているORMのEloquentについて、わかり易く解説します。
LaravelでDBへの問い合わせ方法は大きく分けて2種類
まず初めに、DBへの問い合わせはMVCモデルの「Controller」を経由して行うのが一般的です。
このControllerを用いて問い合わせには大きく分けて以下の2種類の方法があります。
- DBクラス、またはクエリビルダを使う
- ORMを使う
まずはDBクラスから解説します。
DBクラス、クエリビルダ
DBクラスとは、LaravelでDBに対してCRUD(Create Read Update Delete)を行う時に用いるクラスのことです。
このDBクラスを使った問い合わせには、以下の2種類の方法があります。
- 直接SQLを書く
- クエリビルダを使う
まずは、1の直接SQLを書くケースを見てみましょう。
DBクラス – 直接SQLを書く-
Controller
# DBクラスを用いたテーブル取得
public function dbclass(Request $request)
{
$mark = 'db';
$items = DB::select('select * from people');
return view('test.index', ['items' => $items, 'mark' => $mark]);
}
Controllerで、DBインスタンスに対して、selectメソッドを使い、引数に直接SQL文を埋め込んでますね。
次は、2のクエリビルダを使った場合を見てみましょう。
DBクラス – クエリビルダを使う-
Controller
# クエリビルダを用いたテーブル取得
public function querybuild(Request $request)
{
$mark = 'query';
$items = DB::table('people')->get();
return view('test.index', ['items' => $items, 'mark' => $mark]);
}
}
Controllerでは、DBインスタンスに対し「table」というメソッドを使って、引数にテーブルを指定し、getメソッドを用いていますね。
上記2つのコントローラは、どちらとも取得結果は同じです。同じViewのコードで対応できます。
ORM
ORMを簡単に説明すると
DBに対して、SQLを記述せずにPHPのコードでCRUDを実現する仕組みのことです。
ORMはどのような仕組みになっているかと言うと、
DBのテーブルとレコードを「オブジェクト」に自動的に変換し、
テーブルを「モデルクラス」、カラムを「インスタンス」としてみなし、
テーブルからレコードを取得する時にインスタンス化しています。
モデルとは
Modelとは、テーブルの内容を定義したクラスのことです。
テーブル内にあるフィールドをプロパティとして持たせています。
モデルは単数形の先頭大文字で命名します。
モデルの中には、様々なメソッドを作る事ができるので、PHPのコードを書く感覚でDBの値を整形して取得することができます。
Controller
# ormを用いたテーブル取得
public function orm(Request $request)
{
$mark = 'orm';
$items = Person::all();
return view('test.index', ['items' => $items, 'mark' => $mark]);
}
出力結果
共通のView
@foreach($items as $item)
<tr>
<td>{{$item->name}}</td>
<td>{{$item->mail}}</td>
<td>{{$item->age}}</td>
</tr>
@endforeach

コメント