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


関連記事

Google

【Google Invisible reCAPTCHA】Railsサイトにキャプチャ導入

1 はじめに2 reCAPTCHAとは3 Site keyとSecret keyの取得4 Rails gemの導入5 サイトへの組み込み6 さいごに はじめに こんにちは、最近休みなく仕事をいただいて ...

CentOS6のLAMP環境でTLS1.2対応

1 はじめに2 業界団体レベルでのTLS1.2移行3 構成4 ssl.confを編集する5 ジェネレータ任せでOK6 設定変更の影響7 さいごに はじめに ものすごくひさしぶりにLAMP環境のSSL設 ...

aws

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

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

https-portalで既存のdocker環境をhttps化

1 はじめに2 https-portalとは3 設定ファイル3.1 docker-compose.yml3.2 default.conf4 説明4.1 docker-compose.yml4.2 de ...

CircleCIを使ってみた(RailsのRSpecとデプロイのサンプル)

1 はじめに2 導入するにあたって3 項目B4 補足4.1 開発環境とCI環境でdatabase.ymlが異なる5 さいごに はじめに 個人的に作成しているアプリケーションのCIツールとして、Circ ...

フォロー

follow us in feedly

page_side_300rect

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

アプリ情報

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