我尝试解决以下问题:
我想获取按用户的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子句中。
找不到正确的方法。请帮帮我! :)
您可以使用表达式生成器,类似的事情可以完成工作:
$qb
->andWhere($qb->expr()->orX(
$qb->expr()->eq('notification.mandantId', $userMandantId),
$qb->expr()->isNull('notification.mandantId')
))
;