2012-06-29 54 views
0

好的,我仍然對Zend很陌生,試圖找到ORM如何工作,似乎是一個困難的任務(任何人都知道他們有一個特定的位置文件)。除了我試圖做的是接受一個現有的查詢併爲其添加「AND」子句。只是不知道如何去這樣做,因爲我已經發現的其他例子,其中不看像這樣的,我寧願避免在這個PHP postgres Zend Framework使用WHERE'AND'子句選擇查詢

$select = $this->select() 
      ->from('offer_term') 
      ->setIntegrityCheck(false) 
      ->joinUsing('term_mapping', 'term_id') 
      ->where('promo_id = ?', $promo_id); 
     return $this->fetchAll($select); 

回答

1

事實上,一旦你開始瞭解Zend_db的工作方式,這真的很容易。

查詢:

$select = $this->select() 
      ->from('offer_term') 
      ->setIntegrityCheck(false) 
      ->joinUsing('term_mapping', 'term_id') 
      ->where('promo_id = ?', $promo_id); 
     return $this->fetchAll($select); 
你已經在使用 select()對象進行查詢,所以儘量以重構像這樣

(我會包括如何與條件以及這樣做):

$select = $this->select()->setIntegrityCheck(false); 
$select->from('offer_term');//if query is inside of a DbTable model the from() can be omitted 
$select->joinUsing('term_mapping', 'term_id'); 
$select->where('promo_id = ?', $promo_id);//Every time you add a where(), select() adds the param using the AND operator 
$select->where('something_new = ?', $new_param);//if you need to add a param using OR you can use the orWhere() method. 
if (TRUE) { 
    $select->orWhere('something = ?',$parameter);//This will add an OR WHERE to the query if the condition is true. 
} 
return $this->fetchAll($select); 

select()查詢添加一個是通過增加另一個where()到鏈剛做過。這可以通過鏈接來完成,就像我原來的查詢一樣,或者通過使用單獨的語句來完成。如果您需要在select()查詢中使用運算符,則可以使用orWhere()方法。

您可以根據需要混用鏈接和單獨的語句,這使得添加條件非常簡單。

注意: Zend_Db不是ORM,它是表網關和錶行模式的實現(我希望我的名字正確)。所以請不要期望完整的ORM功能。

希望這會有所幫助。

1

嘗試破損:

$select = $this->select() 
    ->from('offer_term') 
    ->setIntegrityCheck(false) 
    ->joinUsing('term_mapping', 'term_id') 
    ->where('promo_id = ?', $promo_id); 
    ->where('name = ?', $name); // WHERE promo_id = $promo_id AND name = $name 
return $this->fetchAll($select); 

而且記得使用manual

+0

如果if-else子句發生,不要假設它們是追加查詢的方法。說這是通過函數實例化的,在某些情況下會導致這是舊的代碼,現在很難跟蹤所有的東西,所以使用該函數我想執行'$ extra = null',所以默認情況下它會工作就像現在一樣,但是如果我通過'$ extra',我想追加附加子句到查詢中,那麼正確的方法是什麼? – chris