CakePHP 1.3与多型树

时间:2012-10-13 08:47:34

标签: database cakephp internationalization tree cakephp-1.3

我正在使用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_idlftrght)都是正确的。

另一个问题:

我想在树中移动记录updown。如果我将scope设置为记录type,我会移动它们,但其他类型的所有子记录都不会移动。 我的树是这样的:

 Category
    Category
       Category
       Attachment
    Category
       Attachment
    Article
       Attachment
       Attachment
    Article
       Attachment
    Attachment
 Category
 Category

如果我没有设置scope移动记录有时看不到树的结尾并开始在其他记录类型之间移动。如何设置scope以避免这种情况?

编辑:我已经找到了可能存在的问题,可能一切都来自同时使用TreeTranslate(我没有提到)的行为一张桌子。那么会发生什么:

为每个模型保存数据时,它还会在i18n表中保存带有翻译的记录。当用verifyrecover表格检查时,树行为只“看到”当前模型​​中的帖子,同时给出“缺失索引”,因为没有看到其他模型的记录。

有没有办法解决这个问题,让它工作或寻找其他选择?

是否可以在一个数据库中使用多个树。所以每个模型都会公布rght,lft值,但不会发生冲突,因为它们不会相互“了解”。只是使用一个表而不是10+具有相同的结构

1 个答案:

答案 0 :(得分:0)

如果您的树元数据是正确的,那么以下内容应该解决您自己的代码中没有的任何问题:

$this->Article->recover($mode = 'tree');

有关详细信息,请参阅http://book.cakephp.org/1.3/view/1356/Data-Integrity