На самом деле это очень просто, как только вы начинаете понимать, как работает 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.
Надеюсь, это поможет.
не предполагайте, что theres способ добавить к запросу в случае предложения if-else. Скажите, что это создается через функцию, а в некоторых случаях это старый код, и сейчас сложно отследить все, поэтому с этой функцией я хочу сделать '$ extra = null', поэтому по умолчанию она будет работать как и сейчас, но в случае, если я передаю '$ extra', я хочу добавить дополнительное предложение к запросу, каков правильный способ сделать это? – chris