Doctrine2:任意加入和单表继承(Doctrine2: Arbitrary join and

2019-08-04 01:50发布

注:这是一个ORM限制汇报了项目的问题跟踪器

我面对的建设使用的实体类,这是一个层次的根学说2.3引入了任意加入语法DQL查询的问题。

考虑到这些类:

A - 无人继承

B1 - 抽象,层次结构的根,鉴别器字段被命名为“类型”

我设置一个查询生成器是这样的:

$qb->select('a.id AS idA, b.id AS idB')
    ->from('\Entity\A', 'a')
    ->leftJoin('\Entity\B1', 'b', \Doctrine\ORM\Query\Expr\Join::WITH, 'a.something=b.something');

而SQL主义产生是这样的:

SELECT a.id, b.id FROM a LEFT JOIN b ON (a.something=b.something) WHERE b.type IN ('1', '2', '3')

问题是,在那里使左连接没用。

有没有办法来强制鉴别列的条件放在一起? 至少,这将使它...

我应该填写bug报告?

Answer 1:

此错误是固定在2.4学说

https://github.com/doctrine/doctrine2/issues/2934



Answer 2:

您是否尝试过内部联接,而不是左加入? 你可能需要可以在查询

SELECT a.id, 
       b.id 
FROM   a 
       INNER JOIN b 
               ON ( a.something = b.something ) 
WHERE  b.type IN ( '1', '2', '3' ) 

你可以通过加入改变功能leftJoin;或者创建拥有海关查询的createQuery方法查询。



Answer 3:

试试这个

SELECT a.id, 
       b.id 
FROM   a 
       INNER JOIN b ON ( a.something = b.something ) and b.type IN ( '1', '2', '3' ) 


文章来源: Doctrine2: Arbitrary join and single table inheritance