我想做一个查询,我想我可以用以下两种方式编写它:
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。
我不明白为什么会这样,任何光都会被欣赏。
答案 0 :(得分:0)
第一个说:给我一辆贴在一个人身上的车,名字是:姓名。当然这是一个汽车清单。
第二个说给我每个人都附在汽车上,其名字是:姓名。当然这是一份人员名单。
由于它们已连接,因此,doctrine eager将相关实体作为主要选择的字段加载,由from子句指示。
基本上,这是面向对象的视图,这就是dql的工作原理。你认为它们应该是相同的是一个面向元组的视图,这就是sql的工作原理。掌握这一概念对于有效运用学说至关重要。