2016-02-02 19 views
7

Ho un MongoDB JSON query string find arbitraria, ad esempio:Doctrine MongoDB - esiste un modo per creare una query da JSON?

{ "address.city": "Seattle"} 

o

{ qty: { $gt: 5, $lt: 50 } 

Esiste un metodo esistente per creare un oggetto Doctrine.MongoDB.Query dalla stringa JSON? O alternativamente per interrogare direttamente il mongo e poi passare quei risultati alla dottrina per l'idratazione?

+0

Si tratta di un hack, ma attualmente sto lavorando intorno a questo eseguendo una query in più. La prima query JSON viene eseguita direttamente contro mongo e raccoglie tutti gli _id come $ idList. Quindi esegui la query doctrine come campo ('id') -> in ($ idList) – tgreiser

risposta

0

Non l'ho usato da solo, ma questo pacchetto recente sembra essere stato creato per servire a questo scopo esatto (querybuilderjs in doctrine).

https://github.com/fourlabsldn/QBJSParserBundle

https://github.com/fourlabsldn/QBJSParser

  $parsedRuleGroup = $this->get('fl_qbjs_parser.json_query_parser.doctrine_orm_parser')->parseJsonString($jsonString, Product::class); 

     $query = $this->get('doctrine.orm.entity_manager')->createQuery($parsedRuleGroup->getDqlString()); 
     $query->setParameters($parsedRuleGroup->getParameters()); 
     $results = $query->execute(); 
1

Esiste un metodo esistente per creare un oggetto Doctrine.MongoDB.Query dalla stringa JSON?

In questo momento no, tuttavia è possibile aggiungere il metodo allo Builder. Più noioso, ma funzionante, sarebbe la creazione di istanze della classe Query da solo.

Oppure alternativamente per interrogare direttamente mongo e quindi passare quei risultati alla dottrina per l'idratazione?

Una volta che avete le matrici semplici con i dati (e non hai paura di tuffarsi in UnitOfWork) si può utilizzare $dm->getUnitOfWork()->getOrCreateDocument() o impiegare HydratorFactory e unire i documenti in DocumentManager tardi.