我有以下(示范)查询:
SELECT *
FROM User u
LEFT JOIN section_user su ON (su.user_id = u.id AND su.section_id = 3)
WHERE section_id is null
我正在尝试使用查询构建器在用户和部分之间的多对多关系中在Symfony2中重建它,但我失败了。
我认为它看起来像这样,证明是错误的:
$er->createQueryBuilder('u')
->leftJoin('u.sections', 's', 'WITH', 's = :section')
->where('s is null')
->setParameter('section', $section);
非常感谢帮助!
答案 0 :(得分:0)
首先,WHERE section_id is null
没有多大意义,
section_id来自哪里?
如果它来自section_user,则它不能同时为3并且为null。;)
如果它来自用户那么它是一对多关系而不是多对多......
或许有点澄清你想要完成的事情。
基本上它的工作方式如下:(左边是Doctrine,右边是Sql)
$er->createQueryBuilder('u') -> SELECT * FROM user u
->leftJoin('u.sections', 'us') -> LEFT JOIN section_user su ON u.id = su.user_id
LEFT JOIN section s ON s.id = su.section_id
->where('us.id = :section') -> WHERE s.id = :section
->setParameter('section', 4);
答案 1 :(得分:0)
# Receive Doctrine query builder
$qb = $this->getDoctrine()->getEntityManager()->createQueryBuilder();
$qb
->select('u')
->from('NameBundle:User', 'u')
->leftJoin('u.section_user', 'su', \Doctrine\ORM\Query\Expr\Join::WITH, 'su.user_id = u.id AND (su.section_id IS NULL OR su.section_id = :section)'); # Join condition
->setParameter('section', $section);
答案 2 :(得分:0)
我认为这与here中的情况相同
但我看到你在leftJoin语句中需要两个条件,试试这个
(我假设两个实体中的身份密钥都是id
)
$qb->select('u')
->from('NameBundle:User','u')
->leftJoin('u.sections','su','ON'
$qb->expr()->andx($qb->expr()->eq('u.id', 'su.user_id'), $qb->expr()->eq('su.id', ':section'))
)
->having('COUNT(su.id) = 0')
->groupBy('u.id')
->setParameter('section',$section_id);
这将使所有尚未与身份$section_id
编辑:我刚注意到你的示例查询没有任何意义,因为它总是不返回任何内容。但我想您想要的是未分配到$section_id