2012-01-09 27 views
10

Me gustaría escribir una consulta en Doctrine Mongo ODM que busca por regex en dos o más campos. En SQL que se vería así:Doctrina MongoDB ODM buscar en dos o más campos

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

me puede escribir una consulta para un campo como éste:

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

, pero estoy en una pérdida cuando trato de buscar en varios campos.

Gracias por cualquier ayuda

Respuesta

17

bueno en realidad es bastante simple, descubrí 5 minutos después de la publicación de esta pregunta

$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

Necesita usar el operador $ u. No estoy seguro de cómo se hace esto en la doctrina, sino que busca el equivalente de esto en el shell:

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

Además, tenga en cuenta que los índices solo se usarán para las expresiones regulares sensibles a mayúsculas y minúsculas. –

Cuestiones relacionadas