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);
クエリにANDを追加するには、チェーンに別の AND を追加するだけです。これは、元のクエリのように連鎖するか、私が行ったように個別のステートメントを使用することで実行できます。クエリでOR演算子を使用する必要がある場合は、メソッドを使用できます。select()
where()
select()
orWhere()
必要に応じてチェーンと個別のステートメントを混在させることができるため、条件を簡単に追加できます。
注: Zend_Db は ORM ではなく、テーブル ゲートウェイとテーブル行パターンの実装です (名前が正しいことを願っています)。したがって、完全な ORM 機能を期待しないでください。
お役に立てれば。