【发布时间】:2018-06-20 22:45:01
【问题描述】:
我有一个名为 Event 的实体和一个名为 Employee 的实体
Event 有一个 ManyToOne 和 Employee 称为 scheduledEmployee
它还有一个ManyToMany 和Employee,称为employeeRequests
Event table 中有一个column,名为employee_id
还有一个Join Table叫Event_Employee_Requests
我将如何查询所有Events 已安排或请求Employee?
$qb = $this->createQueryBuilder('e')
->where('e.scheduledEmployee = :user')
->setParameter('user', $user)
->getQuery();
我能够获取所有已安排的Events,但我也不确定如何获取请求的事件。
更新
我尝试了以下方法:
$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();
这给出以下查询:
SELECT * FROM event e0_ JOIN event_user_request e2_ ON e0_.id = e2_.event_id INNER 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))
如果我删除 JOIN event_user_request 的 ON 子句,此查询将有效,但我不确定如何使用 DQL 执行此操作。
目前上面的SQL 只返回请求的事件,而不是计划的事件
【问题讨论】:
标签: sql doctrine many-to-many