さてさて、もうすぐCakePHPを使った受託案件が複数動き出すので、半年ぶりぐらいにCakePHPを使うということもあり、予習も兼ねてこちらの本を読んでみました。
CakePHP2 実践入門
で、この本、結論からいうと、かなりおすすめです。
特にCakePHPをある程度使っていて、基本的なところは理解している人が特にお勧めです。まったくCakePHPを使ったことがない人、これからCakePHPを始めたい人にはあまりおすすめではないかもしれません。
CakePHPを使っていると、色々とデータの取得方法や、モデルの使い方や、メソッドをどこに置くかなど悩む部分が多くなって来ます。そんな悩みを解決してくれるようなベストプラクティス的な要素が詰まっていて、なるほどと思う部分や、これは使えるという内容が、この本には記載されています。
参考までに私がとても役立った記事は、コアビヘイビアのContainableについてです。
CakePHPではアソシエーションを使って、リレーションするテーブルを複数まとめて取得できるのですが、リレーションの範囲をrecursiveで指定して取得したりします。
ただ、連携範囲を大きくすると、不要なテーブルデータまで取得してしまい、パフォーマンスが遅くなることがあります。
そんな際、不要なテーブルをunbindなどで、外して取得するなどの方法を使ったりしていたのですが、一部のテーブルだけ使いたい場合など、unbindするテーブルが多すぎて、コードが微妙になったりします。
そんな時は、このContainableビヘイビアを使うと超絶便利です。使い方は簡単で、使いたいModelに以下のように下記ます。
public $actsAs = array(‘Containable’);
そして、Controllerなどで、データを取得する際、findメソッドの前で下記を記載すると
$this->ModelA->contain(‘ModelB’); //複数も可
これだけで、取得したいリレーションModelBのみ取得できます。2つ離れたリレーションModelもOKです。
$this->ModelA->contain(‘ModelB’=>array(‘ModelC’));
しかもこれが便利なのは、直後の1回のfindのみ適用され、次回以降は通常の動作をすることです。
これは、早速、パフォーマンスがやや遅い処理に適用して効果が上がりました。
それ以外にも、コントローラの共通処理をApp_Controllerではなく、Componentを使ったほうが良い理由やユニットテストについて、また最後に乗っているCakePHPのチートシートなど、役立つこと満載です。
CakePHPを使う人には是非おすすめの一冊です!