Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/excel/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
SQL-Doctrine/DQL如何构建此查询_Sql_Doctrine_Many To Many - Fatal编程技术网

SQL-Doctrine/DQL如何构建此查询

SQL-Doctrine/DQL如何构建此查询,sql,doctrine,many-to-many,Sql,Doctrine,Many To Many,我有一个名为Event的实体和一个名为Employee 事件有一个名为scheduledEmployee 它还有一个名为employeeRequests的manytomy和employeeRequests 在事件表中有一个列,名为employee\u id 还有一个名为Event\u Employee\u Requests的Join表 我如何查询已安排或请求员工的所有事件 $qb = $this->createQueryBuilder('e') ->where('e.

我有一个名为
Event
的实体和一个名为
Employee

事件
有一个名为
scheduledEmployee

它还有一个名为
employeeRequests
manytomy
employeeRequests

事件表中有一个
,名为
employee\u id

还有一个名为
Event\u Employee\u Requests的
Join表

我如何查询已安排或请求
员工的所有
事件

$qb = $this->createQueryBuilder('e')
        ->where('e.scheduledEmployee = :user')
        ->setParameter('user', $user)
        ->getQuery();
我能够获取所有已计划的
事件
,但不确定如何获取请求的事件

更新 我尝试了以下方法:

        $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\u user\u request
ON
子句,则此查询可以工作,尽管我不确定如何使用DQL执行此操作


目前,上述
SQL
只返回请求的事件,而不返回已安排的事件

要获取为员工安排/请求的事件,您可以使用与查询生成器代码类似的左连接方法

$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)

这似乎奏效了!
Join
leftJoin
之间有什么区别?我想这是最好的解释