对此疯狂..像往常一样,它可能是一些愚蠢的简单,我只是没有看到。 3个对象:Person
Address
Zip
Person
与Address
Address
与Zip
Zip
有一个lat
和lon
字段
现在我想从纬度/经度中选择x公里范围内的所有人。 所以我得到了以下DQL:
SELECT c, ( 6371 * acos( cos( radians(52.377778951201) ) * cos( radians( z.lat ) ) * cos( radians( z.lon ) - radians(4.9055895401203) ) + sin( radians(52.377778951201) ) * sin( radians( z.lat ) ) ) ) AS distance FROM Person c LEFT JOIN c.addresses addr LEFT JOIN addr.zip z HAVING distance < ?4
这给出了0个结果,所以我在没有HAVING distance < ?4
的情况下尝试但是它仍然有0个结果。
我没看到什么?
更新(回答,亲切......):
执行生成的SQL后(感谢@ChrisC)我发现我得到了预期的结果。
所以不得不在处理QueryBuilder
的代码中进行一些挖掘。
我使用以下代码创建Paginator
:
$adapter = new DoctrineAdapter(new ORMPaginator($qb));
$paginator = new Paginator($adapter, true);
$paginator->setDefaultItemCountPerPage(10);
其中$qb
是一种学说QueryBuilder
在我看来,我做了一个foreach:foreach ($paginator as $entity)
对于我使用QueryBuilder
创建的几乎所有查询,这都可以正常工作
但是当我尝试从上面选择$entity
时,不再是Person
对象,而是包含Person
对象作为其第一个元素的数组。作为临时解决方案,我现在在我的视图中执行以下操作:if (!is_object($entity)) $entity = $entity[0];
不是真正的解决方案,但现在会做。
答案 0 :(得分:0)
就像Arth在他的评论中已经建议的那样。您得到一个数组,因为SELECT
子句不被解释为fetch join
,但好像您同时查询c
(Person)和distance
。因此,您可以在第一个成员c
和第二个成员distance
的数组中得到结果。您需要将...... AS distance
移出SELECT
子句。我认为它应该适用。