2011-07-29 12 views
12

Tengo la siguiente consulta:Doctrina, ¿o dónde?

$query = Doctrine_Query::create() 
       ->from('Member m') 
        ->where("m.type='1'") 
         ->andWhere("m.name LIKE '%$term%'") 
         ->orWhere("m.surname LIKE '%$term%'") 
         ->orWhere("m.company LIKE '%$term%'") 
         ->orderBy('id DESC'); 

Pero no funciona como yo quiero - que está ignorando type columna.

Lo que necesito es un conjunto de resultados donde m.type=1 y algunos de los otros campos en esta consulta es LIKE 'something'.

Respuesta

17
$query = Doctrine_Query::create() 
    ->from('Member m') 
    ->where('m.type = 1 AND m.name LIKE ?', '%'.$term.'%') 
    ->orWhere('m.type = 1 AND m.surname LIKE ?', '%'.$term.'%') 
    ->orWhere('m.type = 1 AND m.company LIKE ?', '%'.$term.'%') 
    ->orderBy('m.id DESC'); 

Sus condiciones de quirófano no incluyen la primera condición. También se recomienda utilizar el ? para sus variables para garantizar que Doctrine se les escape.

15

Tom's answer es correcto, aunque me gusta mantener la repetición/duplicación de código al mínimo.

De esta manera también debería funcionar, mientras que ser un camino más corto, más limpio hacerlo

$query = Doctrine_Query::create() 
     ->from('Member m') 
     ->where('m.type = ?', 1) 
     ->andWhere('m.name LIKE :term OR m.surname LIKE :term OR m.company LIKE :term', array(':term' => '%' . $term . '%')) 
     ->orderBy('m.id DESC');