因此,我的SQL的目标是获取Apartments以及有关它们的一些信息。

这是SQL:

SELECT apartment.id, AVG(review.staff), COUNT(distinct review.id), city.name as city_name, state.state as state_name,
    MIN(room.price_per_night)
FROM room
    LEFT JOIN apartment ON room.apartment_id=apartment.id
    LEFT JOIN review ON room.apartment_id=review.apartment_id
    LEFT JOIN city ON apartment.city_id = city.id
    LEFT JOIN state ON city.city_state_id = state.id
GROUP BY apartment.id;


哪个有效。

但是,当我尝试将其转换为DQL时,一切正常,直到我尝试加入审阅表为止:

    $qb = $em->createQueryBuilder('c');

    $qb->select("MIN(r.price_per_night), rev.id")
       ->from("TechforgeApartmentBundle:Room", 'r')
       ->leftJoin('r.apartment', 'a')
       ->leftJoin('Review', 'rev', \Doctrine\ORM\Query\Expr\Join::WITH, 'r.apartment = rev.apartment')
       ->groupBy('a.id');


它总是抱怨在以下情况下未确定审核:


  [语义错误]第0行,'rev WITH r.apartment'附近的col 116:错误:
  联接路径表达式中使用了“标识变量审查”,但是
  之前没有定义。


我尝试了很多,似乎没有任何帮助。

最佳答案

我敢肯定,假设Apartment和Review具有映射的关联,则可以不使用WITH条件。

$qb->select('MIN(r.price_per_night), rev.id')
   ->from('TechforgeApartmentBundle:Room', 'r')
   ->leftJoin('r.apartment', 'a')
   ->leftJoin('a.review', 'rev')
   ->groupBy('a.id');


如果由于某种原因确实需要WITH条件,则语法如下所示:

->leftJoin('a.review', 'rev', 'WITH', 'a.id = rev.apartment_id')

关于php - Doctrine 2/MySQL:无法将SQL左联接转换为DQL左联接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/8105652/

10-12 14:17
查看更多