CakePHPのmodelを動的に生成する方法

CakePHP Advent Calendar 2010に衝動的に参加させて頂く事にしました。
http://cakephp.jp/modules/newbb/viewtopic.php?topic_id=2510&forum=16&post_id=6341

しかしながら冷静に考えるとCakePHPにどっぷり浸かったのは1年以上前なので情報が古いかもですがご容赦ください(^^;


申し込んだ当初はDatasourceネタにしようと思っていたのですが
id:kaz_29 さんのすばらしい記事が上がりましたので別のネタにしようと思います。

CakePHPのmodelを動的に生成する

通常、CakePHPを使った開発だと、DBのテーブルの数だけModelクラスを静的に定義するのが普通だと思います。
しかしながら、マスター系のテーブルなどは単純なCRUDしかしないのに同じような作業を繰り返したり、
致命的なのはModelクラスの数が多くなってくるとリクエスト毎に全クラスをロードして遅くなったりする事だと思います。


そこで、以下のように動的に生成することで上の問題を回避できます。

        // AppControllerなど、どこかで一度だけ。
        loadModel('AppModel'); 
        // Modelが必要な度に。AppModel内でメソッド定義するといいかも。
        $name = Inflector::camelize(low($tableName));
        $model = new AppModel(array('name' => $name, 'table' => $tableName));

(CakePHP1.3では動作確認できてません。すみません...)


個別ロジックが必要なModelはもちろん静的に定義して、ロジックもガシガシ突っ込んで、
それ以外のModelに関してはこの方法で書くとすっきりします。


徹底すれば、物理的なテーブル定義から解放されて、
論理的なModelの上にアプリケーションを構築できるのが大きいと思っています。


簡単ですがこんな感じでいかがでしょうか。