0

我正在使用 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 方法的错误。

以前有人这样做过吗?

谢谢

戴夫

4

2 回答 2

0

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

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

于 2013-10-21T11:44:48.900 回答
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);
}

这没有意义;)

(ps:没有测试这段代码)

于 2013-10-21T11:33:49.320 回答