Я пытаюсь решить следующую проблему:
Я хочу получать уведомления, отфильтрованные по обязательным и ролям пользователя. У пользователя может быть только 1 мандат и несколько ролей.
Поле ролей в базе данных содержит массив 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
обязательная часть проста:
$queryBuilder->where('notification.mandantId = :mandantId OR notification.mandantId is null');
$queryBuilder->setParameter('mandantId', $userMandantId, MandantIdDoctrineType::NAME);
теперь мне нужно l oop над массивом $ role и поместить запросы в одно предложение where в сочетании с OR.
Мне нужно al oop как:
foreach($roles AS $role){
....build up the query sting....
}
с результатом вроде:
$qb->andWhere(JSON_CONTAINS(roles, '\"role1\"', '$') = 1 OR JSON_CONTAINS(roles, '\"role3\"', '$') = 1)
не удалось найти правильный путь. пожалуйста, помогите мне! :)