Symfony的2:INNER非相关表连接的教义查询生成器(Symfony 2: INNER JOI

2019-06-25 14:51发布

我试图建立与学说查询生成器,其加入的非相关表这样的查询:

$query = $this->createQueryBuilder('gpr')
        ->select('gpr, p')
        ->innerJoin('TPost', 'p')
        ->where('gpr.contentId = p.contentId')

但是,这是行不通的。 我还得到一个错误:

错误:标识变量TPost用于联接路径表达但在此之前并没有限定。

我搜索了此错误消息,大家都回答使用表别名+属性像p.someAttribute。 但是,我想加入该表是不相关的表,我开始从我的选择。

作为一个正常的MySQL查询我会写这样的:

SELECT * FROM t_group_publication_rel gpr 
INNER JOIN t_post p 
WHERE gpr.content_id = p.content_id

任何想法,我做错了什么?

Answer 1:

今天我是在类似的任务工作,记住,我开这个问题。 我不知道,因为其教义版本它的工作,但现在你可以很容易地加入到子类中继承映射。 于是这样的查询工作没有任何问题:

$query = $this->createQueryBuilder('c')
        ->select('c')
        ->leftJoin('MyBundleName:ChildOne', 'co', 'WITH', 'co.id = c.id')
        ->leftJoin('MyBundleName:ChildTwo', 'ct', 'WITH', 'ct.id = c.id')
        ->orderBy('c.createdAt', 'DESC')
        ->where('co.group = :group OR ct.group = :group')
        ->setParameter('group', $group)
        ->setMaxResults(20);

我在其中使用的继承映射我的父类开始查询。 在我以前的帖子,这是一个出发点不同,但相同的问题,如果我没有记错的权利。

因为这是一个大问题,当我开始这个问题,我认为这可能是也有趣了不知道这件事情其他人。



Answer 2:

无关联实体之间的连接是不可能的,直到2.4版本,在那里你可以生成语法如下任意加入:

$query = $em->createQuery('SELECT u FROM User u JOIN Blacklist b WITH u.email = b.email');

参考: http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/dql-doctrine-query-language.html



Answer 3:

$dql = "SELECT 
    a, md.fisrtName , md.LastName, mj
    FROM MembersBundle:Memberdata md
        INNER JOIN MembersBundle:Address a WITH md = a.empID
        INNER JOIN MembersBundle:Memberjob mj WITH md = mj.memberData
            ...
    WHERE
        a.dateOfChange IS NULL
    AND WHERE
        md.someField = 'SomeValue'";

return $em->createQuery( $dql )->getResult();


Answer 4:

一个DQL加入只有当关联在映射定义工作。 在你的情况,我会说这是很容易做的本机查询和使用ResultSetMapping来填充你的对象。



文章来源: Symfony 2: INNER JOIN on non related table with doctrine query builder