CakePHP型号可以更改其桌子而不会重新建立吗?
-
19-09-2019 - |
题
我正在使用一个不变的旧数据库架构,其中每个实例的对象中的每个实例都有自己的表格,并带有关联的记录。我需要更改模型的 useTable
每次实例化模型时,都会保留蛋糕的好缓存,而不是。
假设我有许多垫子对象,每个对象都有几个音符对象(Note Altersto 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错误。我无法弄清楚什么是确切的错误,因为当我打开调试时,它可以正常工作。因此,任何关于调试此问题的指示也将有所帮助。
谢谢!
解决方案
你应该能够使用 setSource()
要更改模型使用的表。 $this->setSource('pad_x')
将把表设置为“ PAD_X”并重置模型的模式。 API参考
其他提示
尝试 var $persistModel = false;
在您的控制器或AppController中。
看: http://www.pseudocoder.com/archives/2009/03/17/8-ways-to-peed-peed-up-cakephp-papps/
不隶属于 StackOverflow