Doctrine:如何在一个中包含多个where子句

问题描述 投票:0回答:1

我尝试解决以下问题:

我想获取按用户的Mandant和角色过滤的通知。该用户只能具有1个Mandant和多个角色。

数据库中的角色字段包含一个json数组,其中包含应读取通知的角色。

我有一个具有实际用户角色的数组:

$roles= array('role1','role2','role3')

现在我需要做这样的事情:

select *
from notification
where (mandant_id = 'xxxxx' or mandant_id is null)
AND (JSON_CONTAINS(roles, '\"role1\"', '$') = 1 OR JSON_CONTAINS(roles, '\"role3\"', '$') = 1)
ORDER BY created_at DESC LIMIT 10

mandant部分很容易:

$queryBuilder->where('notification.mandantId = :mandantId OR notification.mandantId is null');
$queryBuilder->setParameter('mandantId', $userMandantId, MandantIdDoctrineType::NAME); 

现在我需要遍历数组$ roles并将查询放在与OR组合在一起的where子句中。

找不到正确的方法。请帮帮我! :)

php mysql symfony doctrine
1个回答
0
投票

您可以使用表达式生成器,类似的事情可以完成工作:

$qb
   ->andWhere($qb->expr()->orX(
      $qb->expr()->eq('notification.mandantId', $userMandantId),
      $qb->expr()->isNull('notification.mandantId')
   ))
;
© www.soinside.com 2019 - 2024. All rights reserved.