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対応

blog-page_footer_336




blog-page_footer_336




-Server
-,

執筆者:

免責事項

このブログは、記事上部に記載のある投稿日時点の一般的な情報を提供するものであり、投資等の勧誘・法的・税務上の助言を提供するものではありません。仮想通貨の投資・損益計算は複雑であり、個々の取引状況や法律の変更によって異なる可能性があります。ブログに記載された情報は参考程度のものであり、特定の状況に基づいた行動の決定には専門家の助言を求めることをお勧めします。当ブログの情報に基づいた行動に関連して生じた損失やリスクについて、筆者は責任を負いかねます。最新の法律や税務情報を確認し、必要に応じて専門家に相談することをお勧めします。


comment

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

CAPTCHA


関連記事

Conohaのサーバーを借りて、CentOS+MySQL+nginxの環境を作ってみた。

1 はじめに1.1 環境2 Conohaでサーバーをレンタル3 サーバーの初期設定3.1 サーバーにrootユーザーでログイン3.2 ユーザー作成3.3 SSHログインを許可3.4 秘密鍵を生成3.5 ...

配牌からアガれるかアガれないか予測する

1 はじめに1.1 趣旨1.2 筆者のスペック1.3 環境1.4 機能概要2 実装に関して2.1 教師データ2.2 前処理2.3 各ノードの重みの学習3 実際に使ってみた3.1 再テスト4 学習させた ...

aws

LocalStackのLambdaをホットリロードさせる

1 はじめに2 全体の流れ2.1 コードの変更を検知する2.2 ファイルをビルドしてdeployする3 ホットリロードを実現する3.1 deployスクリプトを作成する3.2 Watchmanのラッパ ...

aws

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

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

DockerでRuby2.5、Rails5.2betaの環境をつくる【Compose file v3】

1 はじめに2 Dockerのインストール3 ファイルの準備3.1 Gemfile3.2 Gemfile.lock3.3 Dockerfile3.3.1 Ruby(Rails)3.3.2 MySQL3 ...

フォロー

blog-page_side_responsive

2018年10月
 123456
78910111213
14151617181920
21222324252627
28293031  

アプリ情報

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