我有一个名为Event
的实体和一个名为Employee
的实体
Event
有一个ManyToOne
的{{1}}称为Employee
它也有一个scheduledEmployee
和ManyToMany
叫做Employee
employeeRequests
中有一个column
的{{1}}
还有一个名为Event table
的{{1}}
我该如何查询所有employee_id
已被安排或请求的Join Table
?
Event_Employee_Requests
我能够获取预定的所有Events
,但不确定如何获取请求的事件。
我尝试了以下方法:
Employee
这给出了以下查询:
$qb = $this->createQueryBuilder('e')
->where('e.scheduledEmployee = :user')
->setParameter('user', $user)
->getQuery();
尽管我不确定如何使用DQL进行操作,但是如果我删除了Events
的{{1}}子句,则此查询有效。
当前,上述 $qb = $this->createQueryBuilder('e')
->join('e.employeeRequests', 'r')
->where('e.scheduledEmployee = :user')
->orWhere('(r.id = :user AND e.scheduledEmployee is NULL)')
->setParameter('user', $user)
->getQuery();
仅返回请求的事件,而不返回预定的事件
答案 0 :(得分:0)
要获取为员工安排/请求的事件,可以使用类似于查询生成器代码的左联接方法
$qb = $this->createQueryBuilder('e')
->leftJoin('e.employeeRequests', 'r')
->where('e.scheduledEmployee = :user')
->orWhere('(r.id = :user AND e.scheduledEmployee IS NULL)')
->setParameter('user', $user)
->getQuery();
在sql中,它看起来像
SELECT *
FROM event e0_
LEFT JOIN event_user_request e2_ ON e0_.id = e2_.event_id
LEFT JOIN fos_user f1_ ON f1_.id = e2_.user_id
WHERE e0_.scheduled_employee_id = 5
OR (f1_.id = 5 AND e0_.scheduled_employee_id IS NULL)