【发布时间】:2018-03-15 04:03:45
【问题描述】:
我从 Symfony 和教义/mongodb 开始。我正在尝试进行聚合查询,但我得到了
试图调用类“Doctrine\ODM\MongoDB\DocumentManager”的名为“createAggregationBuilder”的未定义方法
类似这样的:
<?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 代表什么。
非常感谢这里的帮助。
更新
我查看了学说/mongodb-odm 源代码,发现我的版本缺少DocumentRepository.php 和DocumentManager.php 文件(都位于/vendor/doctrine/mongodb-odm/lib/Doctrine/MongoDB 文件夹中)中的createAggregationBuilder 函数。
这怎么可能?
我的意思是作曲家说我有版本 1.1.6,这是最新版本,在 git repo 上我可以清楚地看到这些方法(DocumentRepository.php,DocumentManager.php)
【问题讨论】:
-
也许Doctrine Docs: Aggregation Builder 可以提供帮助。在大多数示例中,
$dm可能是 DocumentManager 实例。 -
感谢您的回答,但那里的所有示例都以:
$builder = $dm->createAggregationBuilder(\Documents\User::class);开头那么我如何实例化该 DocumentManager 类?我认为这就是$this->get('doctrine_mongodb')->getManager()所做的。大概是我,对教义的了解不够。 -
@ccKep 如果您可以修改我的示例代码,这将有很大帮助:)
-
我从未使用过 mongodb,但
$dm = $this->get('doctrine_mongodb')->getManager();听起来很对。它返回什么? -
是的,事实证明是正确的 :) 问题出在我的版本上(如我的回答中所述),所以上面的示例代码现在可以正常工作了 :)
标签: php mongodb symfony aggregation doctrine-odm