初心者の僕が知らなかったCakePHP2の便利機能

  • 6
    いいね
  • 0
    コメント

はじめてCakePHP2でウェブアプリケーションを作成した時の俺に捧げる。

時間定義定数

地味だけど使うと便利。

$seconds = 3 * DAY;

http://book.cakephp.org/2.0/ja/core-libraries/global-constants-and-functions.html#id4

配列をconditionsにぶっ込めばIN句になる

ORでつなげる必要はない。

$ids = array(1, 3, 6);
$posts = $this->Post->find('all', array(
    'conditions' => array('Post.id' => $ids)
));

毎回複雑なconditionsを書くならカスタムfindを使う

「表示ステータスがオンで、在庫が0より大きく、現時点で発売日を過ぎている商品」を取得したいなど、明らかに数カ所で使い回すであろうfindの条件があったらカスタムfindで定義しておくとDRYで良い感じになる。
Paginatorでも使えるし、CakePHP2.8からはマジックメソッドにも対応して、既存のfindメソッドと比べても遜色なく使える感じ。

http://book.cakephp.org/2.0/ja/models/retrieving-your-data.html#model-custom-find

配列で死ぬ前にHashクラスに頼る

ややこしい配列を操作したいならHashクラス。
ぶっちゃけドキュメントを読んでも便利さがわかりにくいからいくつかサンプルコードを読んでみるのがおすすめ。

CakePHPのarray地獄をHashクラスで生きのこる
http://blog.howtelevision.co.jp/entry/2014/07/04/160309

【cakePHP】配列を組み替える便利なHashクラス
http://www.mikame.net/pr/archives/834

Containableビヘイビアを使うならAppModelでrecursive = -1っておく

関連データが増えてくると予期せぬアソシエーション先のデータをやたらと自動で引っ張ってくるのでデフォルトは-1で運用しておいた方が安心。

Paginatorのコロン区切りをやめるぞ

namedパラメーターのページネーションはどうしても好きになれない、そんなときはparamTypeにquerystringを指定してあげる。
見慣れたGETパラメーターでのページネーションが完成。

http://book.cakephp.org/2.0/ja/core-libraries/components/pagination.html#get