#merge #zend-framework2 #conditional-statements #where
#объединить #zend-framework2 #условные операторы #где
Вопрос:
У меня проблема с объединением двух условий в моем запросе
public function GetInbox($user_id , $line_number = false , $seeall = false , $limit = 0,$SearchWhere = null)
{
if(!$SearchWhere)
$SearchWhere = new Where();
if(!$seeall)
{
$UsersLineTable = new UsersLinesTable($this->adapter);
$UsersLine = $UsersLineTable->fetchAll(array('user_id = ?' => $user_id,'owner_type = ?' => '1'));
if(!$UsersLine) return false;
$SearchWhere2 = new Where();
foreach ($UsersLine as $key => $value) {
$SearchWhere2->equalTo("recipient_number",$value['line_number'])
->or
->equalTo("recipient_number",'98'.$value['line_number'])
->or;
}
$Select = new Select();
$Select->where($SearchWhere2);
$Select->where($SearchWhere);
if($limit)
$Select->limit($limit);
$Select->order("receive_date DESC");
$MessageProvidersInboxTable = new MessageProvidersInboxTable($this->adapter);
return $MessageProvidersInboxTable->fetchBySelect($Select);
}else{
$MessageProvidersInboxTable = new MessageProvidersInboxTable($this->adapter);
return $MessageProvidersInboxTable->fetchAll($SearchWhere);
}
}
$SearchWhere — это класс Where,
$SearchWhere2 — вторые условия
В этом случае
$Select->where($SearchWhere2);
$Select->where($SearchWhere);
$select просто содержит условия $SearchWhere.
Я хочу, чтобы этот запрос
Where condition1 AND (condition2)
так ли важно, чтобы условие2 содержало условия, включающие операнд OR.
С уважением
Ответ №1:
Попробуйте это, это должно сработать. Запись без просмотра кода zend db:
$where = new ZendDbSqlWhere;
$where->addPredicate($SearchWhere, $where::OP_AND);
$where->addPredicate($SearchWhere2, $where::OP_AND);
$select->where($where);
По сути, Where
object является подклассом Predicate
. Поэтому он должен работать как любой другой предикат.
Комментарии:
1. Спасибо, это другой способ $select->where($SearchWhere); $select-> addPredicate($SearchWhere2);
2. другой способ не будет работать так, как вы ожидаете
where = a or b
, иwhere2 = c
дастa or b and c
, и вам нужно(a or b) and c
3. Я отслеживаю запросы mysql, и это работает для моего случая where1 И (where2)
4. я говорю о
a or b and (where2)
->a or (b and (where2))