【问题标题】:Can we merge doctrine querybuilders and retrieve each ones' results ? is that a best practice?我们可以合并学说查询构建器并检索每个查询构建器的结果吗?这是最佳做法吗?
【发布时间】:2015-05-24 19:15:49
【问题描述】:

我有一个网站,我用不同性质的对象(最后的帖子、最后的食谱、最后发布的成分)填充第一页。我目前有一个查询构建器,然后每个查询都有一个查询,因为我对它们每个都调用 ->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'];

【问题讨论】:

  • 不。 SQL 查询一次只能返回一种记录格式。因此,除非您的帖子、食谱、配料共享完全相同的架构,否则将需要单独查询。
  • 太糟糕了!还是谢谢!

标签: php symfony doctrine-orm doctrine


【解决方案1】:

我对我们的许多查询都是这样做的。我怀疑这种事情是否存在正式的“最佳实践”,但是我可以保证重用构建器确实简化了代码这一事实。例如:

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() 的查询。

【讨论】:

  • 谢谢,但很抱歉,这不是我的问题。我将添加一个示例。
猜你喜欢
  • 2016-06-17
  • 1970-01-01
  • 2019-01-24
  • 1970-01-01
  • 1970-01-01
  • 2011-11-15
  • 2011-03-10
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多