Как получить документы, проверяющие таблицу соединения разрешений с помощью построителя запросов в доктрине symfony?

Мне любопытно, как построить запрос доктрины с помощью построителя запросов в Symfony, который может исключать элементы на основе довольно стандартизированной таблицы соединений разрешений.

В моем случае,

User сущность

Template сущность

userTemplatePermissionTable

В сущности userTemplatePermissions у нас есть следующие свойства:

userToCheck, template, read, write, delete

И я хотел бы что-то эквивалентное:

return $this->createQueryBuilder('t')
[where count of t.userDocumentPermissions > 0
  where canRead = true, canWrite = true, canDelete = true
AND userDocumentpermissions.user = :user]

person Brettins    schedule 08.06.2020    source источник


Ответы (1)


Это оказалось довольно простой настройкой левых соединений и проверок исключения, я получил следующее в моем TemplateRespository.php

public function findUserAuthorized($user, $read = null, $write = null, $delete = null)
{
    $query = $this->createQueryBuilder('t')
    ->leftJoin('t.userTemplatePermissions', 'utp')
    ->where('utp.userToCheck = :user')
    ->setParameter('user',$user);

    if ($read !== null) {
        $query->andWhere('utp.read = :read')
        ->setParameter('read',$read);
    }
    if ($write !== null) {
        $query->andWhere('utp.write = :write')
        ->setParameter('write',$write);
    }
    if ($delete !== null) {
        $query->andWhere('utp.delete = :delete')
        ->setParameter('delete',$delete);
    }
    return $query->getQuery()->getResult();
}
person Brettins    schedule 08.06.2020