Doctrine查询:混淆addWhere,以及Where,或者Where

sf_*_*anb 3 sql doctrine doctrine-1.2

我有一个问题:

$q->andWhere($q->getRootAlias().'.is_published = ?', 1);
$q->andWhere($q->getRootAlias().'.published_at >= ?', time());
$q->leftJoin($q->getRootAlias().'.EventLdapGroup l');
$q->andWhereIn('l.ldap_group_id', $permissions_id );
$q->orWhere('l.ldap_group_id IS NULL);
Run Code Online (Sandbox Code Playgroud)

哪个输出:

FROM 
    Event r LEFT JOIN r.EventLdapGroup l 
WHERE 
    r.is_published = ? AND 
    r.published_at >= ? AND 
    l.ldap_group_id IN (?, ?) OR 
    l.ldap_group_id IS NULL
Run Code Online (Sandbox Code Playgroud)

唯一的问题是,如果ldap_group_id为null(最后一个条件),它将删除is_publishedpublished_at条件.

我想要类似的东西[值是在ldap_group_id中,或者它是否为null]:

FROM 
    Event r LEFT JOIN r.EventLdapGroup l 
WHERE 
    r.is_published = ? AND 
    r.published_at >= ? AND 
    (l.ldap_group_id IN (?, ?) OR l.ldap_group_id IS NULL)
Run Code Online (Sandbox Code Playgroud)

我必须说,我已经迷失在条件复杂的地方.怎么实现呢?

谢谢

bw_*_*ezi 5

而不是你的最后两行

$q->andWhereIn('l.ldap_group_id', $permissions_id );
$q->orWhere('l.ldap_group_id IS NULL);
Run Code Online (Sandbox Code Playgroud)

试试这种方法

$q->andWhere($qb->expr()->orx(
   $qb->expr()->in( 'l.ldap_group_id', $permissions_id ),
   $qb->expr()->isNull( 'l.ldap_group_id' );
Run Code Online (Sandbox Code Playgroud)