LaravelのORM(Object Relation Mapping)をわかりやすく解説

開発

MVCを採用しているフレームワークは、ORMという仕組みがを用いてDBへの問い合わせを行うのが一般的です。
今回は、Laravelに採用されているORMのEloquentについて、わかり易く解説します。

LaravelでDBへの問い合わせ方法は大きく分けて2種類

まず初めに、DBへの問い合わせはMVCモデルの「Controller」を経由して行うのが一般的です。
このControllerを用いて問い合わせには大きく分けて以下の2種類の方法があります。

  1. DBクラス、またはクエリビルダを使う
  2. ORMを使う

まずはDBクラスから解説します。

DBクラス、クエリビルダ

DBクラスとは、LaravelでDBに対してCRUD(Create Read Update Delete)を行う時に用いるクラスのことです。
このDBクラスを使った問い合わせには、以下の2種類の方法があります。

  1. 直接SQLを書く
  2. クエリビルダを使う

まずは、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
View側は全て同じコードで、同じ出力結果を得られる
この記事を書いた人

元専業アフィリエイター。
2019年にプログラマーに転向し、受託開発企業からキャリアをスタート。
使用言語は主にPHP。SwiftやFlutterにも興味有。

Yuukiをフォローする
開発
Yuukiをフォローする
技術ブログ東京

コメント

タイトルとURLをコピーしました