CakePHP

CakePHP setSource()の注意点

モデルが参照するデータベースのテーブルを途中で変更する
ということで「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('テーブル名');

この例は再度データベースを指定して、キャッシュを取得しなおしています。
こうすることで問題は解決です。

時間足らずなので、とりあえずこれで対応ですが
キャッシュを再取得があるような。。。
まぁ調べてみます(汗

コメント