2012-01-09 5 views
10

Je voudrais écrire une requête dans Doctrine Mongo ODM qui recherche par regex dans deux ou plusieurs champs. Dans SQL, il ressemblerait à ceci:Doctrine Recherche MongoDB ODM dans deux ou plusieurs domaines

SELECT * FROM user WHERE name LIKE %search% OR surname LIKE %search%; 

Je peux écrire une requête pour un champ comme ceci:

$qb->field('surname')->equals(new \MongoRegex('/.*'.$this->search.'.*/i')); 

mais je suis à une perte lorsque je tente de rechercher dans d'autres champs.

Merci pour toute aide

Répondre

17

bien en fait, il est assez simple, j'ai trouvé 5 minutes après avoir publié cette question

$qb->addOr($qb->expr()->field('surname')->equals(new \MongoRegex('/.*'.$this->search.'.*/i'))); 
$qb->addOr($qb->expr()->field('name')->equals(new \MongoRegex('/.*'.$this->search.'.*/i'))); 
1

Vous devez utiliser l'opérateur $ ou. Je ne sais pas comment cela se fait dans la doctrine, mais vous recherchez l'équivalent de ce dans la coquille:

db.people.find({ $or: [{surname: /^regex1/}, {surname: /^regex2/}] }) 
+0

Notez également que les index ne seront utilisés que pour les expressions régulières sensibles à la casse. –

Questions connexes