MongoDB / doctrine: не может вложить $ или $ $

У меня возникли проблемы с вложением нескольких двух операндов $or операций в пределах $and операции. Заключение этого обсуждения похоже на то, что мне нужно, но я не могу заставить его работать. Вот JavaScript того, что я пытаюсь сделать:

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

Это работает в интерактивной оболочке MongoDB.

И вот какой-то PHP, который выглядит нормально для меня, но не работает (вызывает бесконечную рекурсию, где указано):

 $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(); 

Есть идеи?

Здесь перекрестный указатель .

Похоже, вам нужно создать отдельный подзапрос, прежде чем добавить его в $q .

$q->addAnd(...) оценивается немедленно и добавляет себя к $q , но вы хотите, чтобы он подождал.

У меня нет этого пакета, поэтому я не могу тестировать, но это только догадка. Надеюсь, поможет.

 $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(); 

Вы можете попробовать следующее:

 $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();