我怎么能离开加入并添加条件,它不会读取它带来所有ridedriver对象的位置?

时间:2017-03-29 14:08:56

标签: doctrine-orm dql symfony-3.2

我如何LEFT并添加WHERE条件? 它没有读取它带来所有ridedriver对象的位置?

SELECT p 
FROM RideDriverEmployeeBundle:Ridedriver p 
LEFT JOIN Chaya3niUserBundle:Bookings b WITH b.idridedriver = p.id 
WHERE p.frequency IS NOT NULL 
  AND p.nbrplaces > 0 
  AND b.iduser != 2 
  OR b.iduser IS NULL

1 个答案:

答案 0 :(得分:0)

如果我正确理解您的问题,则可能是您的WHERE条款存在问题。尝试将parantheses与条款的OR部分一起使用。

SELECT p 
FROM RideDriverEmployeeBundle:Ridedriver p 
LEFT JOIN Chaya3niUserBundle:Bookings b WITH b.idridedriver = p.id 
WHERE p.frequency IS NOT NULL 
  AND p.nbrplaces > 0 
  AND (b.iduser != 2 OR b.iduser IS NULL)

回答你在评论中提出的问题..

  

我想选择除用户已在

中预订的所有驱动程序之外的所有驱动程序

听起来你只是不想要WHERE条款中的其他条件。

SELECT p 
FROM RideDriverEmployeeBundle:Ridedriver p 
LEFT JOIN Chaya3niUserBundle:Bookings b WITH b.idridedriver = p.id 
WHERE b.iduser IS NULL

通过执行LEFT JOIN,然后仅使用WHERE .. IS NULL获取联接表中不存在的记录,这样做LEFT OUTER JOIN

在您的情况下,{A}是表A,Ridedriver是表B,因此这将返回Bookings中未加入Ridedriver中任何内容的记录。