原则 2 自我引用查询 -- 不起作用



$ 我正在尝试使用原则 2 查询生成器创建以下场景

SELECT 
    p . *
FROM
    _tree p
    LEFT JOIN
    _tree c ON p.id = c.parent_id
       AND (c.lft >= p.lft AND c.rgt <= p.rgt)
WHERE
    p.id = 3 

我设置了以下由教义生成的自我关系2

    类树 {   /**     * @var \树     *     * @ORM\ManyToOne(targetEntity="Tree"(     * @ORM\JoinColumns({     * @ORM\JoinColumn(name="parent_id", referencedColumnName="id"(     * })     */   私人$parent;      其他代码    }

这是我的回购类

_em->createQueryBuilder((;        $qb->选择('p'(           ->from('Entity\Tree', 'p'(           ->leftJoin('p.Entity\Tree','c', 'ON','p.id = c.parent_id'(;        返回 $qb->getQuery((->getResult((;    }}

但我无法完成它。它抛出以下错误

[2013 年 10 月 1 日星期二 22:30:11] [错误] [客户端 127.0.0.1] PHP 致命错误: 未捕获的异常"Doctrine\ORM\Query\QueryException" 消息 '从实体\树中选择 p p 左加入 p.实体\树 c 打开 p.id = c.parent_id' 英寸 /var/www/pcb_frame_work/System/Libraries/Vendors/Doctrine/ORM/Query/QueryException.php:39Stack 跟踪:#0 /var/www/pcb_frame_work/System/Libraries/Vendors/Doctrine/ORM/Query/Parser.php(429(: Doctrine\ORM\Query\QueryException::d qlError('SELECT p FROM E...')#1 /var/www/pcb_frame_work/System/Libraries/Vendors/Doctrine/ORM/Query/Parser.php(925(: Doctrine\ORM\Query\Parser->semanticalError('Class 实体\编辑...'(#2 /var/www/pcb_frame_work/System/Libraries/Vendors/Doctrine/ORM/Query/Parser.php(1561(: Doctrine\ORM\Query\Parser->JoinAssociationPathExpression((#3 /var/www/pcb_frame_work/System/Libraries/Vendors/Doctrine/ORM/Query/Parser.php(1506(: Doctrine\ORM\Query\Parser->JoinAssociationDeclaration((#4 /var/www/pcb_frame_work/System/Libraries/Vendors/Doctrine/ORM/Query/Parser.php(1435(: Doctrine\ORM\Query\Parser->Join((#5 /var/www/pcb_frame_work/System/Librari in /var/www/pcb_frame_work/System/Libraries/Vendors/Doctrine/ORM/Query/QueryException.php 在第 49 行,引用者:

我不知道

我是否完全理解你,但我认为你必须将你的 ManyToOne 关系更改为:

/**
 * @var Tree
 *
 * @ORMManyToOne(targetEntity="Tree", inversedBy="children")
 * @ORMJoinColumns({
 *   @ORMJoinColumn(name="parent_id", referencedColumnName="id")
 * })
 */
private $parent;
/**
 * @ORMOneToMany(targetEntity="Tree", mappedBy="parent")
 */
private $children;

这样,您就可以访问具有$Tree->children的类的子级,并且该类的父级具有$Tree->parent

有关自引用关联的更多信息,请参阅:http://docs.doctrine-project.org/en/latest/reference/association-mapping.html#one-to-many-self-referencing

最新更新