我需要帮助才能将有效的SQL查询转换为createQueryBuilder
。我遇到的问题是我不知道LEFT JOIN
中SELECT
的{{1}}如何{/ 1}}。
createQueryBuilder
我在下面有两个问题,我希望用户SELECT username, count(c.user_owner_id) as num_contact, a_g.name as
group_name
FROM `oro_user` as u
INNER JOIN `oro_user_access_group` as u_g on u.id=u_g.user_id
INNER JOIN `oro_access_group` as a_g on u_g.group_id=a_g.id
LEFT JOIN
(SELECT cc.user_owner_id
FROM `orocrm_contact` as cc
INNER JOIN`orocrm_contact_to_contact_grp` as cc_g on cc_g.contact_id=cc.id
INNER JOIN `orocrm_contact_group`
as c_g on cc_g.contact_group_id=c_g.id
WHERE c_g.label='New One' and cc.semester_contacted='2017A')
as c on u.id=c.user_owner_id
WHERE a_g.name='Full-timer' and u.enabled = 1 and u.gender='male'
GROUP BY u.id
ORDER BY num_contact
来自联系人的结果
LEFT JOIN
答案 0 :(得分:0)
这是一个非常复杂的查询,因为ORM QueryBuilder比数据库更接近您的实体,我不确定您是否可以将DQL“转储”到->join()
。有效DBAL QueryBuilder的好消息:
$dbalQueryBuilder
->from('user_table as u')
...
->join('u', '('.$otherDbalQueryBuilder->getSQL().')', 'c')
这是来自记忆所以它可能有点不同,但是类似的东西。
通过它,您可以获得所需的所有字段,但不会获得任何实体。幸运的是Doctrine provides ways to build entities from Native SQL using ResultSetMapping。
$userWithContacts = $entityManager->createNativeQuery(
$dbalQueryBuilder->getSQL(),
$yourResultSetMapping
);
我知道这将需要更多的代码,并且可能不如使用ORM QueryBuilder那么好,但我发现它通常是处理需要以某种方式移植到ORM的现有查询的最佳方式。