php mongodb doctrine doctrine-odm

php - MongoDB/doctrine: no se puede anidar $ o $ y



doctrine-odm (2)

Parece que necesita construir una subconsulta por separado antes de agregarla a $q .

$q->addAnd(...) se evalúa inmediatamente y se agrega a $q , pero desea que espere.

No tengo este paquete instalado, así que no puedo probar, pero esto es solo una corazonada. Espero eso ayude.

$q = $doctrineOdm->createQueryBuilder(''Business''); foreach (array(''American'',''Mega'') as $keyword) { $r = new /MongoRegex(''/''.$keyword.''/i''); $q->addAnd( $q->expr()->addOr($q->expr()->field(''nm'')->equals($r)) ->addOr($q->expr()->field(''dsc'')->equals($r)) ); } print_r($q->getQuery()->getQuery()); // infinite recursion $cursor = $q->getQuery()->execute();

Tengo problemas para anidar operaciones $or operaciones de dos operadores múltiples dentro de una operación $and . La conclusión de esta discusión suena similar a lo que necesito, pero no puedo hacer que funcione. Aquí está el JavaScript de lo que trato de hacer:

db.Business.find( { $and: [ { $or: [{nm: /American/}, {dsc: /American/}] }, { $or: [{nm: /Mega/}, {dsc: /Mega/}] } ] } )

Eso funciona en el shell interactivo de MongoDB.

Y aquí hay algo de PHP que me parece bien pero que no funciona (causa recursión infinita donde se indica):

$q = $doctrineOdm->createQueryBuilder(''Business''); foreach (array(''American'',''Mega'') as $keyword) { $r = new /MongoRegex(''/''.$keyword.''/i''); $q->addAnd( $q->addOr($q->expr()->field(''nm'')->equals($r)) ->addOr($q->expr()->field(''dsc'')->equals($r)) ); } print_r($q->getQuery()->getQuery()); // infinite recursion $cursor = $q->getQuery()->execute();

¿Algunas ideas?

Cruzado aquí .


Puedes intentar lo siguiente:

$filters = array( new /MongoRegex(''/American/i''), new /MongoRegex(''/Mega/i'') ); $q = $doctrineOdm->createQueryBuilder(''Business'') -> field(''nm'') ->in($filters) -> field(''dsc'') ->in($filters); print_r($q->getQuery()->getQuery()); // infinite recursion $cursor = $q->getQuery()->execute();