Yii嵌套(Yiiext)。试图移动根节点

时间:2013-10-21 09:22:46

标签: yii yii-extensions nested-sets

我正在使用Yiiext“嵌套设置行为”的奇妙扩展:
https://github.com/yiiext/nested-set-behavior

我很想知道当我运行具有多个根的嵌套集时,是否有人可以让我知道如何移动(向上或向下)根节点。

树例子:

  1. 电话(根节点)
    1.1移动
    1.2固定
  2. 汽车(根节点)
    2.1快速
    2.2慢的 2.3平均值
  3. 平面(根节点)
    3.1大号 3.2小件
  4. 当我拿出完整的树并向用户显示时,我得到了上述结果。

    我希望能够在“电话”之前移动“汽车”。

    有没有办法做到这一点?

    我试过了:

        $cars        = Category::model()->findByPk($cars_id);
        $phones      = $cars->prev()->find();
        $cars->moveBefore($phones);
    

    这使我在嵌套集行为类的moveAfter方法中出错。

    之前有人这么做过吗?

    由于

    戴夫

2 个答案:

答案 0 :(得分:0)

正如文档建议的那样,prev()方法返回:

Array of Active Record objects corresponding to ....

因此,您必须以不同的方式处理此问题,例如

$phones = Category::model()->findByPk($phones_id);
$cars = Category::model()->findByPk($cars_id);
$cars->moveBefore($phones);

或其他适合您的应用场景的方法

您的代码可以通过以下方式修复:

$cars        = Category::model()->findByPk($cars_id);
$phones      = $cars->prev()->find();

foreach($phones as $phone){
  $cars->moveBefore($phone);
}

这没有意义;)

(p.s:未测试此代码)

答案 1 :(得分:0)

据我所知,你有3个节点,它们是根。 问题是方法moveAfter()和moveBefore()不能应用于主根。 您正在尝试移动节点,相对另一个节点,但它们位于不同的树中。 如果汽车和手机有共同的根,那就会成功。

换句话说,你使用不同树中的节点进行操作,这些树对彼此一无所知。