Doctrine查询不会返回相同的结果,具体取决于连接的顺序

时间:2013-04-16 19:46:06

标签: symfony doctrine dql

我想做一个查询,我想我可以用以下两种方式编写它:

SELECT c, p
FROM MyBundle:Car c
    JOIN c.person p
WHERE
    p.name =  :name

SELECT c, p
FROM MyBundle:Person p
    JOIN p.car c
WHERE
    p.name =  :name

因为在这两种情况下我都是按照特定顺序要求“c,p”,所以我希望查询返回相同的东西,但是,在第一种情况下,我得到的对象是Car类型和第二种情况属于Person。

我不明白为什么会这样,任何光都会被欣赏。

1 个答案:

答案 0 :(得分:0)

第一个说:给我一辆贴在一个人身上的车,名字是:姓名。当然这是一个汽车清单。

第二个说给我每个人都附在汽车上,其名字是:姓名。当然这是一份人员名单。

由于它们已连接,因此,doctrine eager将相关实体作为主要选择的字段加载,由from子句指示。

基本上,这是面向对象的视图,这就是dql的工作原理。你认为它们应该是相同的是一个面向元组的视图,这就是sql的工作原理。掌握这一概念对于有效运用学说至关重要。