gpt4 book ai didi

php - CakePHP 模型是否可以在不重新实例化的情况下更改其表?

转载 作者:行者123 更新时间:2023-12-02 06:25:32 25 4
gpt4 key购买 nike

我正在使用一个不可更改的遗留数据库模式,其中对象的每个实例在数据库中都有自己的表和相关记录。每次实例化模型时,我都需要更改模型的 useTable,但保留 Cake 的良好缓存等等。

假设我有很多 pad 对象,每个对象都有几个音符对象(Note belongsTo Pad,Pad hasMany Note)。每个垫子在垫子表中都有一条记录,但是每个音符在数据库中都有自己的表(比如标题为“pad_{id}”)。这个模式是固定的,我必须使用它。

现在我不需要做任何保存,所以我在模型的 before find 中这样做以支持阅读:

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 reference

关于php - CakePHP 模型是否可以在不重新实例化的情况下更改其表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1506101/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com