我有一个网站,我在第一个页面上填充了不同性质的对象(最后的帖子、最后的食谱、最后发布的配料)。我目前有一个querybuilder,然后为每个查询都有一个查询,因为我对每个查询调用->getQuery()->getResult()。
在执行查询之前,是否有一种方法可以合并所有这些查询生成器,以便检索由每个查询生成器的结果组成的结果数组?
这会是最好的做法吗?我们该怎么做?
编辑:我希望我们能做什么:
$recipesQueryBuilder = $this->getDoctrine->getRepository('Recipe')->createQueryBuilder('r');
$postsQueryBuilder = $this->getDoctrine->getRepository('Post')->createQueryBuilder('p');
$results = mergeQueryBuilder($recipesQueryBuilder, $postQueryBuilder)->getQuery()->getResult();
$recipes = $results['r'];
$posts = $results['p'];
我对我们的许多查询都这样做。我怀疑这类事情是否有正式的"最佳实践",但我可以保证,重新使用构建器确实简化了代码。例如:
public function getListBuilder(User $user)
{
return $this->createQueryBuilder('l')->where('l.user = :user')->setParameter('user', $user)->orderBy('l.name');
}
我有许多查询重复使用这个基本构建器。例如:
public function countLists(User $user = null)
{
$qb = $this->getListBuilder($user);
return $qb->select('COUNT(l)')->getQuery()->getSingleScalarResult();
}
同样地,另一方法findActiveLists()
将顺序改变为createdAt
并生成指定了setMaxResults()
的查询。