Введение
Для моего личного проекта я использую:
Настройка
Я настроил древовидную структуру (которая представляет каталоги и файлы) под названием FileTree
.Я добавил несколько пользовательских полей в дерево: item_name
, item_extension
, item_sort_value
и is_file
.
Проблема
Не могу получить папки и файлы, отсортированные по полю item_sort_value
в fileTree!
В то же время я могу сортировать элементы (по мере необходимости) при извлечении файлов только из пользовательского фильтра.
Мой КОД
Получение(полный размер) дерево папок
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();
}
Я могу видеть много дополнительных запросов SQL (всякий раз, когда я использую reorder
или reorderAll
) в Symfony profiler
, так что что-то определенно происходитвкл, но после этого - элементы сортируются одинаково в дереве ...
Заключение
Я что-то не так делаю?
Идеи и ответы приветствуются!