2012-06-29 3 views
0

Ok Я все еще новичок в Zend и пытаюсь найти, как работает ORM в целом для него, кажется, создает сложную задачу (кто-нибудь знает, где у них есть конкретная документ для него). В стороне от того, что я пытаюсь сделать, это взять существующий запрос и добавить к нему предложение «И». Просто не знаю, как идти об этом, что, как примеры, которые я нашел еще где не смотрят, как этот, и я предпочел бы избежать поломки на этом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.

Надеюсь, это поможет.

1

Try:

$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

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

Смежные вопросы