以下是我的实体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();
现在结果返回了我想要的对象数组。 感谢回答的人。
答案 0 :(得分:0)
在这种情况下,我必须至少使用select
,f.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