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

时间:2009-10-01 19:57:19

标签: php cakephp cakephp-appmodel

我正在使用一个不可更改的遗留数据库模式,其中一个对象的每个实例在数据库中都有自己的表,并带有相关记录。我需要在每次实例化模型时更改模型的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错误。我无法弄清楚确切的错误是什么,因为它在我打开调试时工作正常。因此,任何有关解决这个问题的指示也会有所帮助。

谢谢!

2 个答案:

答案 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/