【问题标题】:Sort Gedmo Tree by arbitrary field using symfony4, doctrine2 and stofDoctrineExtensionsBundle使用 symfony4、doctrine2 和 stofDoctrineExtensionsBundle 按任意字段对 Gedmo 树进行排序
【发布时间】:2019-03-13 16:54:33
【问题描述】:

简介

对于我正在使用的个人项目:

  • Windows 10 专业版
  • XAMPP 与 PHP v7.2.14
  • Postgres v10.6
  • Symfony v4.2.4
  • 学说 v2.6.3

  • StofDoctrineExtensionsBundle 用于管理树结构。

设置

我确实设置了名为FileTree 的树结构(表示目录和文件)。我在树中添加了几个自定义字段:item_nameitem_extensionitem_sort_valueis_file

问题

我无法在 fileTree 中获取按字段 item_sort_value 排序的文件夹和文件!

同时,仅在自定义文件中检索文件时,我可以对项目进行排序(根据需要)。

我的密码

检索(全尺寸)文件夹文件树

public function getFileTreeNodeArray($file_tree_root_id): array
{
    $em = $this->getEntityManager();

    $query = $em
        ->createQueryBuilder()
        ->select('ft')
        ->from(FileTree::class, 'ft')
        ->where('ft.root = :root_id')
        ->setParameter('root_id', $file_tree_root_id)
        ->orderBy('ft.root, ft.lft', 'ASC')
        //->addOrderBy('ft.itemSortValue', 'ASC')
        ->getQuery();

    $query->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);

    return $query->getArrayResult();
}

检索文件夹中的文件

public function getFileTreeNodeContentFilesByUploaderArray($file_tree_node_id, $user_id): array
{
    $em = $this->getEntityManager();

    $is_file = true;
    $query = $em
        ->createQueryBuilder()
        ->select('ft')
        ->from(FileTree::class, 'ft')
        ->where('ft.parent = :file_tree_node_id')
        ->andWhere('ft.isFile = :is_file')
        ->andWhere('ft.uploader = :user_id')
        ->setParameter('file_tree_node_id', $file_tree_node_id)
        ->setParameter('is_file', $is_file)
        ->setParameter('user_id', $user_id)
        ->orderBy('ft.itemSortValue', 'ASC')
        ->getQuery();

    $query->setHint(\Doctrine\ORM\Query::HINT_INCLUDE_META_COLUMNS, true);

    return $query->getArrayResult();
}

我尝试了什么

我尝试使用reorderreorderAll,但“无济于事”。

一个例子

public function reorderFileTreeBranch($parent_id): void
{
    $repo_file_tree = $this->entityManager->getRepository(FileTree::class);

    $branch_node = $repo_file_tree->findOneBy(['id' => $parent_id]);
    $repo_file_tree->reorder($branch_node, 'item_sort_value', 'ASC');
    $this->entityManager->flush();
}

我可以在Symfony profiler 中看到许多额外的 SQL 查询(无论何时我使用 reorderreorderAll),所以肯定会发生一些事情,但在那之后 - 项目在树中的排序相同...

结论

我做错了吗?

欢迎提出想法和答案!

【问题讨论】:

    标签: php symfony tree symfony4 doctrine-extensions


    【解决方案1】:

    好吧,经过多次尝试和失败,我设法让它按预期工作。 原来NestedTreeRepositoryTrait 中的reorder 在成功时没有返回true...我修复了它 - 所以 - 现在按预期订购炒锅。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-07-08
      • 2023-03-23
      • 1970-01-01
      • 2011-01-13
      • 1970-01-01
      相关资源
      最近更新 更多