我的DQL查询只返回FROM对象,如果另一个对象是相关的,这很好,但它不是。
我的查询:
$query = $this->em->createQuery('SELECT c, s FROM MyBundle:Person c, MyBundle:Spot s
JOIN s.geo_data g JOIN g.features f WHERE f.active = true AND
ST_Distance(f.location, c.location) < :distance GROUP BY c, s');
这在SQL中完美运行,为我提供了所有的点和所有人:距离。但是在DQL中,它只返回person对象,因为在数据库级别它们没有相关性,所以我无法获取正确的位置。
我的数据库设置正确,我使用的是PostGIS后端,而且点和人没有任何关联。它们碰巧在同一张地图上,我正在查询空间关系。
根据文件记录,它的预期行为,从我读到的,s是水合的,但根本没有返回,干得好!
我如何教DQL请回复我在SELECT中告诉它的内容?在哪里&#34;我的意思是我所说的,不再是一个聪明人&#34;切换?
答案 0 :(得分:3)
您可以尝试选择两个实体的所有字段,例如
SELECT c.location, ..., s.geo_data, ...
这将为每个包含两个实体的所有字段的列提供一个数组。 如果需要,也许你可以使用结果集映射来获取实体。
答案 1 :(得分:0)
如果你想坚持使用Doctrine,你必须在地点和人之间定义一个OneToMany关系。通过这种方式,您可以设置PeopleRepository并设置一个方法,如getPeopleByLocationAndMaxDistance(Location $ location,$ distance)
SELECT p
FROM People AS p
LEFT JOIN Places AS pl
WHERE ST_Distance(p.location, pl.location) < :distance