Symfony:自定义存储库函数返回非对象结果

时间:2014-03-17 15:14:35

标签: symfony

以下是我的实体Feed的自定义存储库功能的内容。

return $this->createQueryBuilder('f')
->select('f, COUNT(s)')
->leftJoin('f.subscriptions','s')
->groupBy('f')
->having('f.inCatalog = TRUE')
->orHaving('COUNT(s) > 0');
->getQuery()->getResult();

我想在我的目录中获得至少有一个订阅的每个订阅源,然后在foreach loop中浏览它,但它会返回:

FatalErrorException: Error: Call to a member function getId() on a non-object in * line *

知道如何解决这个问题吗? 我看到你可以做,例如$feed[0]->getId(),但我想要一个对象,而不是一个数组。 有些主题相似,但我没有找到任何好的答案。

编辑:嗯,我想我找到了自己问题的答案......

为了得到我想要的,我需要删除select中的COUNT()。我不想要它,只有在HAVING中才需要它。

这看起来有效:

return $this->createQueryBuilder('f')
->leftJoin('f.subscriptions','s')
->groupBy('f')
->having('f.inCatalog = TRUE')
->orHaving('COUNT(s) > 0');
->getQuery()->getResult();

现在结果返回了我想要的对象数组。 感谢回答的人。

2 个答案:

答案 0 :(得分:0)

在这种情况下,我必须至少使用selectf.id中的主键,并按此ID分组

答案 1 :(得分:0)

尝试部分...

$qb->select('partial f.{id, subscriptions}, count(s.id)');

结果可能会以数组形式返回,因此您可以尝试访问它

{{ feed[0][0]->getId() }}

看到我的类似问题: How can I select count(field) and still get an object with createQueryBuilder