$
我正在尝试使用原则 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