CakePHP模型可以更改其表而无需重新实例化吗?

hor*_*irs 2 php cakephp cakephp-model

我正在使用一个不可更改的遗留数据库模式,其中一个对象的每个实例在数据库中都有自己的表,并带有相关记录.我需要在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;
    }

}
Run Code Online (Sandbox Code Playgroud)

这会更改数据库中使用的模型表,并且可以正常工作Core::debug > 0.但是,当它为零时,我认为CakePHP缓存模型代码并且没有正确地更改表.在任何情况下,当我访问/ pads/view/{pad_id}或动态更改此表的任何操作时,我都会收到404错误.我无法弄清楚确切的错误是什么,因为它在我打开调试时工作正常.因此,任何关于调试此问题的指示也会有所帮助.

谢谢!

Mar*_*ory 9

您应该可以使用setSource()更改模型正在使用的表. $this->setSource('pad_x')将表设置为'pad_x'并重置模型的模式.API参考