我正在使用CakePHP 1.3的TreeBehavior。在一个DB表中,我获得了所有模型记录。每条记录都有一个type
字段,用于存储模型名称。直到现在一切都充满了魅力。但是我在具体行动中遇到了一些错误。首先,如果我$this->Article->verify()
我几乎每条记录都会出错:
Array
(
[0] => Array
(
[0] => index
[1] => 1
[2] => missing
)
[1] => Array
(
[0] => index
[1] => 2
[2] => missing
)
[2] => Array
(
[0] => index
[1] => 3
[2] => missing
)
....
我发现有错误的记录和没有错误的记录之间没有任何区别
我试过了Recover
,但仍然是一样的。为什么我会收到这些错误,这是什么意思?我检查了树数据,每个字段(parent_id
,lft
,rght
)都是正确的。
另一个问题:
我想在树中移动记录up
和down
。如果我将scope
设置为记录type
,我会移动它们,但其他类型的所有子记录都不会移动。
我的树是这样的:
Category
Category
Category
Attachment
Category
Attachment
Article
Attachment
Attachment
Article
Attachment
Attachment
Category
Category
如果我没有设置scope
移动记录有时看不到树的结尾并开始在其他记录类型之间移动。如何设置scope
以避免这种情况?
编辑:我已经找到了可能存在的问题,可能一切都来自同时使用Tree
和Translate
(我没有提到)的行为一张桌子。那么会发生什么:
为每个模型保存数据时,它还会在i18n表中保存带有翻译的记录。当用verify
或recover
表格检查时,树行为只“看到”当前模型中的帖子,同时给出“缺失索引”,因为没有看到其他模型的记录。
有没有办法解决这个问题,让它工作或寻找其他选择?
是否可以在一个数据库中使用多个树。所以每个模型都会公布rght,lft值,但不会发生冲突,因为它们不会相互“了解”。只是使用一个表而不是10+具有相同的结构
答案 0 :(得分:0)
如果您的树元数据是正确的,那么以下内容应该解决您自己的代码中没有的任何问题:
$this->Article->recover($mode = 'tree');
有关详细信息,请参阅http://book.cakephp.org/1.3/view/1356/Data-Integrity。