SQL к доктрине строителя запросов - PullRequest
0 голосов
/ 30 января 2019

Я хочу использовать построитель запросов доктрины, но не могу найти способ включить оператор CASE WHEN, поскольку помощник не существует.

Это запрос, который я хочу "перевести":

SELECT u.id, u.first_name, u.last_name, u.email, u.role,
CASE WHEN pl.created_by_id IS NULL &&  pl.updated_by_id IS NULL &&  po.created_by_id IS NULL &&  po.updated_by_id IS NULL THEN 'active'
ELSE 'has content' 
END AS 'status'
FROM user u
LEFT JOIN planning pl on u.id = pl.created_by_id or u.id = pl.updated_by_id
LEFT JOIN post po on u.id = po.created_by_id or u.id = po.updated_by_id
WHERE u.password_change_required = false
GROUP BY u.id
ORDER BY u.id

Я пробовал это:

$qb = $this->createQueryBuilder('u')
        ->addSelect('case when pl.created_by_id is null and pl.updated_by_id is null and po.created_by_id is null and po.updated_by_id is null then active else has content end as status') 
        ->leftJoin('App\Entity\Planning', 'pl', 'WITH', 'u.id=pl.createdBy or u.id=pl.updatedBy')
        ->leftJoin('App\Entity\Post', 'po', 'WITH', 'u.id=po.createdBy or u.id=po.updatedBy')
        ->where('u.passwordChangeRequired = false')
        ->groupBy('u')
        ->orderBy('u.id')
    ;

, но оно определенно не работает

...