2

树行为和关联在我的应用程序中运行良好。

我正在尝试在运行时切换树表,它适用于 beforeFind 方法中的以下代码:

$this->setSource($table);

但是,当我使用恢复方法重新排列树时,所有查询都不会考虑表名:我在新表上得到 SHOW COLUMN 查询,在默认表上得到 SELECT 查询。我试图禁用和清除我的应用程序的缓存但没有成功。

我也在更改关联模型的表,但是没有它也会出现问题。

任何建议将不胜感激。

编辑:这是使用的模型: https ://github.com/croogo/croogo/blob/1.3/models/taxonomy.php

我禁用(永久,而不是在运行时)缓存行为。

我将问题追溯到recover方法,bindModel没有考虑到useTable。

 $Model->bindModel(array('belongsTo' => array('VerifyParent' => array(
                            'className' => $Model->name,
                            'foreignKey' => $parent,
                            'fields' => array($Model->primaryKey, $left, $right, $parent),
                    ))));

我试过没有成功:

$Model->VerifyParent->useTable = $Model->useTable;

我开了一张灯塔票: https ://cakephp.lighthouseapp.com/projects/42648/tickets/3820-cannot-change-table-name-using-treebehaviorrecover-in-shell

belongsTo associations cannot define custom tables for the linked model. You may need to seed ClassRegistry with a properly configured model with the VerifyParent key.
4

1 回答 1

0

可以通过修改 Tree 行为来解决问题:

$Model->VerifyParent->setSource($Model->useTable)

这是一个在这里接受和引用的错误: https ://cakephp.lighthouseapp.com/projects/42648/tickets/3820-cannot-change-table-name-using-treebehaviorrecover-in-shell

但是,不确定它是否会在 cakephp 源中修复,因为它非常具体。

于 2013-05-30T09:49:04.467 回答