モデルが参照するデータベースのテーブルを途中で変更する
ということで「setSource()」を以前に説明しましたが、注意点を発見。。。
自分のメモとして記録します(汗
恐らくデータベースの設計が複雑だったり、負荷分散的(?)につかわないかぎり
あまり利用されない方法かとは思いますが。。。
さて注意点ですが、コントローラーの途中で「setSource()」を使うことで
参照テーブルを変更できますが、コントローラーの途中で新たなテーブルを作成して
そのテーブルを「setSource()」でセットするとどうなるでしょうか。。。
はい、実はテーブルがありませんとエラーが出ます。
これはCakePHPが接続しているデータベースのテーブル情報を
キャッシュし、そのキャッシュ内に変更するテーブルがあれば変更できるような仕様でした(泣
まぁあたり前といえば当たり前。
そこで下記のようにすることで回避ができたのでご参考に(笑
$db = ConnectionManager::getDataSource($this->useDbConfig); $dbconf = new DATABASE_CONFIG(); $dbbArray = array( 'database'=>$dbconf->{$this->useDbConfig}['database'], 'host'=>$dbconf->{$this->useDbConfig}['host'] ); $db->reconnect($dbbArray); $this->setSource('テーブル名');
この例は再度データベースを指定して、キャッシュを取得しなおしています。
こうすることで問題は解決です。
時間足らずなので、とりあえずこれで対応ですが
キャッシュを再取得があるような。。。
まぁ調べてみます(汗
コメント