2011-07-29 43 views
12

Tôi có truy vấn sau đây:Học thuyết - hoặc ở đâu?

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

Nhưng nó không làm việc như tôi muốn - nó được bỏ qua type cột.

Điều tôi cần là kết quả được đặt trong đó m.type=1 và một số trường khác trong truy vấn này là LIKE 'something'.

Trả lời

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

Điều kiện OR của bạn không bao gồm điều kiện đầu tiên. Bạn cũng nên sử dụng số ? cho các biến của mình để đảm bảo Doctrine thoát chúng.

15

Tom's answer là chính xác, mặc dù tôi muốn giữ mã lặp lại/sao chép ở mức tối thiểu.

Bằng cách này cũng nên làm việc, trong khi được một cách sạch hơn ngắn hơn để làm điều đó

$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'); 
Các vấn đề liên quan