Yii嵌套集(Yiiext)。正在尝试移动根节点

Yii嵌套集(Yiiext)。正在尝试移动根节点,yii,yii-extensions,nested-sets,Yii,Yii Extensions,Nested Sets,我正在使用Yiiext的奇妙扩展“嵌套集行为”: 我很想知道,当我运行多个根的嵌套集时,是否有人可以让我知道如何移动(向上或向下)根节点 树示例: 电话(根节点) 1.1移动设备 1.2固定的 车辆(根节点) 2.1快速 2.2慢 2.3平均值 平面(根节点) 3.1大型 3.2小型 当我拉出完整的树并向用户展示时,我得到了上面的结果 我希望能够将“汽车”移到“电话”之前 有没有办法做到这一点 我试过: $cars = Category::model()->find

我正在使用Yiiext的奇妙扩展“嵌套集行为”:

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

树示例:

  • 电话(根节点)
    1.1移动设备
    1.2固定的
  • 车辆(根节点)
    2.1快速
    2.2慢
    2.3平均值
  • 平面(根节点)
    3.1大型
    3.2小型
  • 当我拉出完整的树并向用户展示时,我得到了上面的结果

    我希望能够将“汽车”移到“电话”之前

    有没有办法做到这一点

    我试过:

        $cars        = Category::model()->findByPk($cars_id);
        $phones      = $cars->prev()->find();
        $cars->moveBefore($phones);
    
    这在嵌套的set behavior类的moveAfter方法中给出了一个错误

    以前有人这样做过吗

    谢谢


    Dave

    如文档所示,prev()方法返回:

    与..对应的活动记录对象数组

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

    $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);
    }
    
    这毫无意义;)


    (附注:未测试此代码)

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

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