我正在使用一个不可更改的遗留数据库模式,其中一个对象的每个实例在数据库中都有自己的表,并带有相关记录。我需要在每次实例化模型时更改模型的useTable
,但保留Cake的漂亮缓存,什么不是。
假设我有很多pad对象,每个对象都有几个音符对象(注意belongsTo Pad,Pad hasMany Note)。每个打击垫在打击垫表中都有一个记录,但每个记事本在数据库中都有自己的表(称为“pad_ {id}”)。这个架构是固定的,我必须使用它。
现在我不需要做任何保存,所以我在模型中执行此操作之后才发现支持阅读:
function beforeFind($query_data) {
if(empty($query_data['pad_id'])) {
return false;
} else {
$this->useTable = $query_data['pad_id'];
parent::__construct();
return $query_data;
}
}
这会更改数据库中使用的模型表,并在Core::debug > 0
时正常工作。但是,当它为零时,我认为CakePHP缓存模型代码并且没有正确地更改表。在任何情况下,当我访问/ pads / view / {pad_id}或动态更改此表的任何操作时,我都会收到404错误。我无法弄清楚确切的错误是什么,因为它在我打开调试时工作正常。因此,任何有关解决这个问题的指示也会有所帮助。
谢谢!
答案 0 :(得分:9)
您应该能够使用setSource()
来更改模型正在使用的表。 $this->setSource('pad_x')
会将表设置为'pad_x'并重置模型的架构。 API reference
答案 1 :(得分:1)
在控制器或AppController中尝试var $persistModel = false;
。
请参阅:http://www.pseudocoder.com/archives/2009/03/17/8-ways-to-speed-up-cakephp-apps/