【问题标题】:Yii Nested Set (Yiiext). Trying to move a root nodeYii 嵌套集 (Yiiext)。试图移动根节点
【发布时间】:2013-10-29 17:08:44
【问题描述】:

我正在使用 Yiiext “nested-set-behavior”的精彩扩展:
https://github.com/yiiext/nested-set-behavior

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

树示例:

  1. 电话(根节点)
    1.1 手机
    1.2 固定
  2. 汽车(根节点)
    2.1 快速
    2.2 慢
    2.3 平均
  3. 平面(根节点)
    3.1 大
    3.2 小

当我拉出完整的树并将其展示给用户时,我得到了上述结果。

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

有什么办法吗?

我试过了:

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

这让我在嵌套集合行为类的 moveAfter 方法中出现错误。

以前有人做过吗?

谢谢

戴夫

【问题讨论】:

    标签: yii yii-extensions nested-sets


    【解决方案1】:

    正如文档建议的那样,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:未测试此代码)

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-10-07
        • 2021-09-05
        • 2010-12-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多