2012-01-09 15 views
10

Vorrei scrivere una query in Doctrine Mongo ODM che esegue la ricerca in espressioni regolari in due o più campi. In SQL sarebbe simile:Doctrine MongoDB Ricerca ODM in due o più campi

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

posso scrivere una query per un campo come questo:

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

ma sono in perdita quando provo a cercare in più campi.

Grazie per qualsiasi aiuto

risposta

17

bene in realtà è abbastanza semplice, ho scoperto 5 minuti dopo la pubblicazione questa domanda

$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

è necessario utilizzare il $ o l'operatore. Io non sono sicuro di come questo viene fatto in dottrina, ma si sta cercando per l'equivalente di questo nella shell:

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

Inoltre, tenere presente che gli indici verranno utilizzati solo per le espressioni regolari con distinzione tra maiuscole e minuscole. –

Problemi correlati