cakephpのO/Rマッパ

環境: cakephp3

cakephpでは、
リポジトトリテーブルオブジェクト そして
エンティティー と、2つのオブジェクトを使ってデータベースのデータを操作する。

(テーブルオブジェクトCake/ORM/Table(コード読むこと)→ 特定のテーブルに保存されたエンティティーのコレクションへのアクセスを提供する)
(エンティティー → テーブルオブジェクトがオブジェクトのコネクションにアクセスするときに、エンティティーがアプリの各行やドメインオブジェクトを表す)

(例)
use Cake/ORM/TableRegistry;
// Articleテーブルのインスタンス  
$article = TableRegistry::get('Article');
$query = $article->find();
foreach($query as $row) {
     // $rowはArticleのインスタンス
     echo $row->title;
}  

なんと、コードを作ったり、設定書いたり、いらない。 データベースからエンティティをロードした時に、 新しい Article クラスのインスタンスが生成される。

  • あとがき

Ruby on Railsが採用したActiveRecordというO/Rマッパである。これにより、重複さけられる。
CakePHP3で一新されたORMは「結果が配列からオブジェクトになった」だけではない!!!!!!!

「Eager loading と Lazy loading」

Eager loading →JOINを使って可能な限り、一度のクエリで関連データの取得をするので、扱うデータが大きい。扱うデータが多い場合はクエリが複雑になる場合さえある。特に、コントローラーからORMを使う場合などは基本的にEager Loading。

Lazy loading →JOINを使わずにシンプルなクエリを実行する。CakePHP3ではエンティティクラスからクエリを実行する形にすることで必要な時に後からクエリを実行する事ができるようになった。