2011-07-29 4 views
12

나는 다음과 같은 쿼리가 :교리 - 또는 어디에?

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

을하지만 내가 원하는 것처럼 작동하지 않습니다 - 그것은 type 열을 무시한다.

결과 집합은 m.type=1이고이 쿼리의 다른 필드 중 일부는 LIKE 'something'입니다.

답변

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'); 

귀하의 OR 조건에는 첫 번째 조건이 포함되어 있지 않습니다. 또한 Doctrine이 변수를 이스케이프하도록하려면 변수에 ?을 사용하는 것이 좋습니다.

15

Tom's answer은 정확하지만 코드 반복/복제를 최소한으로 유지하려고합니다.

짧은, 청소기 방법 인 것은 그것을

$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'); 
을 수행하는 동안 또한 작업을해야 이런 식으로