如何使用doctrine / mongodb在symfony中构建聚合查询?

时间:2017-10-03 21:02:51

标签: php mongodb symfony aggregation doctrine-odm

我开始使用Symfony和doctrine / mongodb。我试图进行聚合查询,但我得到了

  

尝试调用名为" createAggregationBuilder"的未定义方法。 class" Doctrine \ ODM \ MongoDB \ DocumentManager"

有这样的事情:

<?php

namespace AppBundle\Controller;

use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
use Symfony\Bundle\FrameworkBundle\Controller\Controller;
use Symfony\Component\HttpFoundation\Request;

class TestController extends Controller
{
  /**
   * @Route("/test", name="test")
   */
  public function testAction(Request $request) {
    $builder = $this->get('doctrine_mongodb')
       ->getManager()
       ->createAggregationQuery('AppBundle:Test');

    var_dump($builder);
  }
}

我现在非常沮丧,因为每个文档或stackoverflow问题和答案都以

开头
$dm->createAggregationQuery();

在这种情况下,我无法找出$dm代表什么。

我非常感谢这里的一些帮助。

更新

我在doctrine / mongodb-odm源代码中查找,我发现我的版本缺少createAggregationBuilderDocumentRepository.php文件中的DocumentManager.php函数(两者都位于在/vendor/doctrine/mongodb-odm/lib/Doctrine/MongoDB文件夹中。

这怎么可能?

我的意思是作曲家说我有版本1.1.6,这是最新版本,在git repo上我可以清楚地看到这些方法(DocumentRepository.phpDocumentManager.php

1 个答案:

答案 0 :(得分:1)

傻傻的我。问题是我使用的是doctrine/mongodb-odm的1.1.6版本,而聚合构建器只能在1.2版本中使用。直到(对于任何像我一样盲目的人),只需使用“dev-master”版本。 在composer.json修改doctrine/mongodb-odm行:

"require": {
    "doctrine/mongodb-odm": "dev-master"
}

然后运行composer update doctrine/mongodb-odm