2017-10-03 10 views
1

Je commence avec Symfony et doctrine/mongodb. Je suis en train de faire une requête d'agrégation, mais je reçoisComment construire une requête d'agrégation dans symfony avec doctrine/mongodb?

a tenté d'appeler une méthode non définie nommée « createAggregationBuilder » de classe « Doctrine \ ODM \ MongoDB \ DocumentManager »

avec quelque chose comme ça :

<?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); 
    } 
} 

Je suis maintenant assez frustré, car toutes les questions et réponses documentation ou stackoverflow commencent par

$dm->createAggregationQuery(); 

et je ne peux pas savoir ce que $dm signifie dans ce cas.

J'apprécierais vraiment de l'aide ici.


MISE À JOUR

Je regardais autour de la doctrine/code source mongodb-odm et je trouve que ma version manque la fonction createAggregationBuilder à la fois le DocumentRepository.php et le fichier DocumentManager.php (tous deux situés dans dossier /vendor/doctrine/mongodb-odm/lib/Doctrine/MongoDB.

Comment cela peut-il être?

Je veux dire compositeur dit que j'ai la version 1.1.6, qui est la dernière version et sur le repo git je peux effacer voir ces méthodes (DocumentRepository.php, DocumentManager.php)

+2

[Doctrine Docs: Générateur d'agrégation] (http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/aggregation-builder.html) peut être utile. '$ dm' est probablement une instance de DocumentManager dans la plupart des exemples. – ccKep

+0

Merci pour la réponse, mais tous les exemples commencent par: '$ builder = $ dm-> createAggregationBuilder (\ Documents \ User :: class);' Alors, comment puis-je instancier cette classe DocumentManager? J'ai pensé que c'était ce que $ this-> get ('doctrine_mongodb') -> getManager() 'a fait. C'est probablement moi qui ne connais pas assez la doctrine. –

+0

@ccKep cela aiderait beaucoup si vous pouviez modifier mon code exemple :) –

Répondre

1

Silly moi. Le problème était que j'utilisais la version 1.1.6 de doctrine/mongodb-odm et le constructeur d'agrégation ne sera disponible que dans la version 1.2. Jusqu'à ce que (pour toute personne étant aussi aveugle que moi), il suffit d'utiliser la version "dev-master". Dans votre composer.json modifier la ligne doctrine/mongodb-odm à ceci:

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

Et puis exécutez composer update doctrine/mongodb-odm.