问题描述
||
我有一个查询:
$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);
输出:
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
唯一的问题是,如果ldap_group_id
为空(最后一个条件),它将删除is_published
和published_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)
而且我必须说,我迷失在复杂的条件下。
如何实现呢?
谢谢
解决方法
代替最后两行
$q->andWhereIn(\'l.ldap_group_id\',$permissions_id );
$q->orWhere(\'l.ldap_group_id IS NULL);
试试这个方法
$q->andWhere($qb->expr()->orx(
$qb->expr()->in( \'l.ldap_group_id\',$permissions_id ),$qb->expr()->isNull( \'l.ldap_group_id\' );
,好的解决方案在这里:
$q->andWhere(\'(l.ldap_group_id IN ( \' . implode(\",\",$permissions_id) . \') OR l.ldap_group_id IS NULL )\' );