cakephp - 树行为 : how to quickly reorder existing data by a certain field?

标签 cakephp tree behavior

我有一个 cakephp 应用程序,其类别模型充当树。我通过 csv 文件导入了约 100 个类别。

我希望能够按名称快速对所有类别重新排序,以便我的索引 View 排序正确。

我尝试了 reorder method from the Tree behavior :

$this->Category->reorder(array(
'id' => null,
'field' => 'Category.name',
'order' => 'ASC'
));

但它没有做任何事情。我在这里遗漏了什么吗?

谢谢:)

最佳答案

我刚刚对此进行了研究,并得出结论,不可能在 generatetreelist() 方法中对结果进行排序 - 至少没有简单的方法,无需循环并手动移动每个结果节点。解决这个问题的最佳方法是使用普通的 find 方法,并将第一个参数设置为“线程”,然后您可以像任何查询一样应用 SQL 排序。我的类别模型中有这个方法:

public function getThreaded($conditions = array()) {
    return $this->find('threaded', array(
        'order' => 'Category.name ASC',
        'contain' => false
    ));
}

这将返回一个按字母顺序排列的所有父类别的数组,其中“子”键包含另一个数组,该数组也按字母顺序排列!我使用 contain => false 来减少返回的数据(线程返回有关每个节点父节点的数据,我们不需要知道),如果需要,您可以更改它以包含额外的数据。

我知道这与 generatetreelist() 并不 100% 相同,但当您控制输出时,它肯定更整洁且更灵活。如果您确实需要模拟 generatetreelist() 的行为,您可以从上面循环遍历数组,如下所示:

$treeArray = array();
foreach($category as $parent) {
    $treeArray[] = $parent['Category']['name'];
    if(!empty($parent['children']) {
        foreach($parent['children'] as $childCategory) {
            $treeArray[] = ' - '.$childCategory['Category']['name'];
        }
    }
}

希望这有帮助。

关于cakephp - 树行为 : how to quickly reorder existing data by a certain field?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5350990/

相关文章:

CakePHP:创建临时表并使用它

php - 错误的重定向 CakePHP

algorithm - 二叉搜索树交集

JQuery 可排序的奇怪行为 connectWith div

php - 计算 Cakephp 查询生成器的行数

php - 没有 PHP 经验的人应该使用像 CakePHP 或 Symfony 这样的框架吗?

Android - 以树结构表示和遍历数据的最佳方式

c - C实现中的多路树搜索算法

python - 关于Python中另一个函数内部的函数

android - 签名的 Android 应用程序的行为与从 Eclipse 在设备上手动运行时不同?