【发布时间】: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_name、item_extension、item_sort_value 和 is_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();
}
我尝试了什么
我尝试使用reorder 和reorderAll,但“无济于事”。
一个例子
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 查询(无论何时我使用 reorder 或 reorderAll),所以肯定会发生一些事情,但在那之后 - 项目在树中的排序相同...
结论
我做错了吗?
欢迎提出想法和答案!
【问题讨论】:
标签: php symfony tree symfony4 doctrine-extensions