Server

単体のORMライブラリとしてEloquentを使う

投稿日:

はじめに

こんにちは。先日から、今となっては珍しい(多分)、フレームワーク無しのPure PHPで構築されているプロジェクトに関わっています。
フレームワークを使うことが絶対正しいというわけではないのですが、エンジニアが数人関わる状況で個々がコードを書き散らす状況も生まれていて、せめてDBアクセス部分だけでも統一化するため、ORMの導入を検討した結果、現状で使用例が多そうなEloquentを採用しました。
今回の記事は導入からベーシックな使い方までの備忘録的なものです。

Eloquentとは

ORMのひとつで、PHPフレームワークのLaravelで採用されています。RailsのORMであるActiveRecordライクに使えるとのこと。
一方でDBファサードというクエリビルダも含んでおり、こちらは生でSQLを組み立てていくのに近い形で使えます。
前者は単純なCRUDをする時に、後者は複雑なテーブル結合をしつつCOUNT()の結果だけが欲しい、というような集計系の実装で…という感じで使い分けるといいのかな、と感じています。
Laravel5のアーキテクチャから学ぶより良いクラス設計

ORMって何ぞ?という方はこちらをどうぞ。
オブジェクト関係マッピング
Ormとの付き合い方

導入

稼働中のプロジェクトに組み込むので、なるべく他のコードは汚したくありません。プロジェクト内の任意の場所に新しくディレクトリを作成し、その中でComposerを使いインストールします。
私はCentOS6および7で確認していますが、PHPさえインストールされていれば、OS環境による差異は無いと思います。
導入手順はこちらのページをお読みいただければ、ほぼ完結します。

Composerインストール

PHPのパッケージ管理ツールComposerは、2018年10月現在、PHP5.3.2以上で動作します。現在サポートが続いてるCentOS6のBaseリポジトリでyum installできるバージョンが5.3.3ですから、それに合わせているのでしょうか。
ただし5.3系でComposerを入れようとすると、PHPのアップデートを促す警告がしつこいくらい出ます。PHP5.6すら2018年いっぱいでサポートが切れますので、当然ですね…。

Eloquentインストール

composerでインストールするilluminate/databaseがパッケージ名で、このパッケージで実装されているORMがEloquentです。
illuminate/databaseはORMとクエリビルダを内包していて、それぞれの記述方法でDBにアクセスできます(後述)。

DB接続

illuminate/database

公式のREADME.mdを参考にするだけで、ほぼ迷うことはないと思います(和訳もありました)。
このページを参考に、PHPからDB接続するコードを作成します(下記コードはローカルのMySQLに接続する方法です)。

vi ./database.php

以上がDB接続のために最低限必要なコードとなり、上記コードを記述したPHPファイルを読み込めばOKです。

モデルクラス作成

illuminate\Database\Eloquent\Modelを継承したクラスを作成します。

vi ./User.php

実際に使う

*1〜*3は、いずれもUserテーブルからレコードを取得しています。メソッド名の意味が全く違うので想像しやすいと思いますが、それぞれ違う検索をしています。

  • *1はEloquent入門的なコードでよく出てきますが、全件取得メソッドです。総レコード数が10件などの小さなテーブルならいいのですが、レコードが1000件あるテーブルなら1000件取得してしまうので、実際は*2や*3のようなコードをよく使うと思います。
  • *2は前述のDBファサードによる検索で、ORMではなくクエリビルダを使って検索を実行しています。一見してどんなクエリが作られるのか想像しやすいのがメリットだと思いますが、返ってくるデータは配列です。
    せっかくEloquentを導入しているのにモデルクラスのメソッドを使えないのは勿体無いので、なるべくモデルクラスとして取得したいところです。
    ただし*2は複数のテーブルをJOINするなどの複雑なクエリを構築しやすく、集計系の機能にはこちらが向いているかと思っています。
  • *3のようにhydrate()を使うと、*2で取得した配列をCollectionに変換して返してくれます。Collectionは配列のように扱えて、foreachなどでレコードを1行ずつモデルクラスとして取得できます。

さいごに

EloquentをORMライブラリとして使うにあたり、導入はとても簡単で、かつ既存コードへの影響を抑えられるのが有り難いです。また、ActiveRecordライクなORMということで、他言語のORMを使う際も理解が早くなりそうという期待もあります。

おすすめ書籍

PHPフレームワーク Laravel入門 PHPフレームワーク Laravel Webアプリケーション開発 バージョン5.5 LTS対応

page_footer_300rect




page_footer_300rect




-Server
-,

執筆者:


comment

メールアドレスが公開されることはありません。

CAPTCHA


関連記事

aws

AWSのT3インスタンスの特徴

1 はじめに2 T3インスタンスとは2.1 T3インスタンスのスペック2.2 Unlimited Modeがデフォルトで有効2.3 ハイパーバイザはNitro3 T2インスタンスとの比較3.1 仮想C ...

aws

Amazon Linux 2でLet’s Encryptが使えない

1 はじめに2 Amazon Linux 22.1 Amazon Linux Extras Library3 Let’s Encrypt4 本題5 さいごに はじめに 知人からタイトルのよ ...

aws

MyCoachの本番環境をAWS上に構築する 〜ネットワーク編〜

1 はじめに1.1 関連記事2 MyCoachのネットワーク構成3 VPCとは3.1 設定する項目4 VPCの設定5 インターネットゲートウェイの設定6 サブネットの設定6.1 公開ネットワークの設定 ...

aws

Amazon EC2を使ってみる

1 はじめに2 事前準備2.1 ルートアカウントのMFAを有効化2.2 個々のIAMユーザの作成(及びグループの作成)2.3 IAMユーザのMFAを有効化2.4 IAMパスワードポリシーの適用3 EC ...

aws

EC2インスタンスのメモリとディスクのメトリクスモニタリングでハマったこと

1 はじめに2 メモリとディスクのメトリクスモニタリング3 ハマりポイント4 対応方法5 さいごに はじめに AWSのEC2インスタンスでディスク容量やメモリの使用率をCloudWatchで監視をする ...

フォロー

follow us in feedly

page_side_300rect

2018年10月
« 9月 11月 »
 123456
78910111213
14151617181920
21222324252627
28293031 

アプリ情報

私たちは無料アプリもリリースしています、ぜひご覧ください。 下記のアイコンから無料でダウンロードできます。