Symfony的Gedmo Tree组件抛出排序错误问题排查
解决Gedmo Tree childrenHierarchy方法排序异常问题
出现Invalid sort options specified: field - root, direction - asc异常,大概率是实体Tree配置缺失或数据库字段未同步导致的,按以下步骤排查修复:
检查实体Tree注解配置
确保你的Category实体已正确配置root字段的TreeRoot注解,同时包含Tree所需的left、right、level字段,示例配置如下:use Gedmo\Mapping\Annotation as Gedmo; use Doctrine\ORM\Mapping as ORM; /** * @ORM\Entity(repositoryClass="Gedmo\Tree\Entity\Repository\NestedTreeRepository") * @Gedmo\Tree(type="nested") */ class Category { // 主键等基础字段 /** * @ORM\Id * @ORM\GeneratedValue * @ORM\Column(type="integer") */ private $id; /** * @Gedmo\TreeRoot * @ORM\Column(name="root", type="integer", nullable=true) */ private $root; /** * @Gedmo\TreeLeft * @ORM\Column(name="lft", type="integer") */ private $left; /** * @Gedmo\TreeRight * @ORM\Column(name="rgt", type="integer") */ private $right; /** * @Gedmo\TreeLevel * @ORM\Column(name="lvl", type="integer") */ private $level; // 名称等业务字段 /** * @ORM\Column(type="string", length=255) */ private $name; // 对应的getter、setter方法 }注意必须指定Repository为
NestedTreeRepository或其自定义子类,不能使用普通Doctrine Repository。同步数据库Schema
执行Doctrine命令更新数据库,确保root字段已正确创建:# Symfony项目示例 php bin/console doctrine:schema:update --force # 原生Doctrine或其他框架对应命令 php vendor/bin/doctrine orm:schema-tool:update --force手动指定排序参数(临时修复)
如果上述配置都没问题仍报错,可以调用childrenHierarchy时手动指定排序字段,绕过默认的root排序:$tree = $repository->childrenHierarchy( null, false, ['sortBy' => 'lft', 'sortDir' => 'asc'] );
内容的提问来源于stack exchange,提问作者Rafal Dudek
相关产品推荐
相关产品推荐

