我正在使用Yiiext的奇妙扩展"nested-set-behavior":
https://github.com/yiiext/nested-set-behavior
我很想知道当我运行具有多个根的嵌套集时,是否有人可以让我知道如何移动(向上或向下)根节点。
树示例:
- 电话(根节点)
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);
这在嵌套集行为类的 moveAfter 方法中给我带来了错误。
以前有人这样做过吗?
谢谢
戴夫
正如文档建议的那样,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);
}
这;)没有意义
(附注:没有测试此代码)
据我了解,您有 3 个节点,它们是根。问题是方法moveAfter()和moveBefore()不能应用于主根。您正在尝试移动一个节点,相对于另一个节点,但它们位于不同的树中。如果汽车和手机有一个共同的根源,那就是成功。
换句话说,您使用不同树中的节点进行操作,这些节点彼此一无所知。