読者です 読者をやめる 読者になる 読者になる

CakePHP1.3 バーチャルフィールドの動的指定

CakePHP 1.3からはVirtualFieldという機能がはいって、
モデルの実フィールドではないものを実フィールドであるかのように扱えるようになってる。
例えば、ユーザー単位での投稿数をCOUNT(Entry.id)でとりたい場合、今まではModelクラスのFieldであるかのように扱えなかったが、
扱えるようになった。

詳しくは、
CakePHP1.3移行ガイド - 新機能 > virtual fields

で、クラスにvar宣言してしまうと、JOINしたものをバーチャルフィールド化している場合、
JOINしてないSQLを発行したときにもバーチャルフィールドを使おうとするのでSQLエラーになってしまう。

で、これで良いと思うが、

        $this->virtualFields = array('entry_count'=>'COUNT(Entry.id)'); // SQL 発行前にバーチャルフィールド設定
        $users = $this->find('all', $options);
        $this->virtualFields = null; // 別のSQLを投げるときに邪魔になるので排除。

求む識者。