2013-07-14 4 views
0

У кого-нибудь есть проблемы с этим?Zend Framework 2 выберите или

Я пытаюсь использовать предикат для сравнения целых чисел в заявлении, которое должно выглядеть следующим образом

SELECT * FROM `table` WHERE (cat1=1 OR cat1=2 OR cat2 = 1 OR cat2 = 2); 

это то, что я есть

$resultSet = $this->select(function (Select $select) { 

     $where = new \Zend\Db\Sql\Where(); 
     $pred_1 = new \Zend\Db\Sql\Predicate\Like('cat1', 1); 
     $pred_2 = new \Zend\Db\Sql\Predicate\Like('cat1', 2); 
     $pred_3 = new \Zend\Db\Sql\Predicate\Like('cat2', 1); 
     $pred_4 = new \Zend\Db\Sql\Predicate\Like('cat1', 2); 
     $where->orPredicate($pred_1)->orPredicate($pred_2)->orPredicate($pred_3)->orPredicate($pred_4); 

}); 

resultSet является объектом, но он возвращает все результаты из таблицы, без фильтрации

+0

'$ pred_4 = new \ Zend \ Db \ Sql \ Predicate \ Like ('cat1', 2);' строка имеет cat1 вместо cat2. Это может быть проблема? – akond

+0

Вам не нужно подключать '$ where' к' $ select' каким-то образом? Подобно '$ select-> where-> orPredicate (...)' –

ответ

1

Посмотрите на документацию, и вы найдете все, что вам нужно. http://framework.zend.com/manual/2.0/en/modules/zend.db.sql.html#zend-db-sql-select.

Zend предоставит вам большую часть работы, вам просто нужно предоставить массив.

$resultSet = $this->select(function (Select $select) { 

    $select->where(array(
     'cat1 = 1', 'cat1 = 2', 'cat2 = 1', 'cat2 = 2' 
    ), \Zend\Db\Sql\Predicate\PredicateSet::OP_OR); 
}); 

\Zend\Db\Sql\Predicate\PredicateSet::OP_OR является важной частью в вашем случае.

1
$resultSet = $this->select(function (Select $select) { 

     $where = new \Zend\Db\Sql\Where(); 
     $pred_1 = new \Zend\Db\Sql\Predicate\Like('cat1', 1); 
     $pred_2 = new \Zend\Db\Sql\Predicate\Like('cat1', 2); 
     $pred_3 = new \Zend\Db\Sql\Predicate\Like('cat2', 1); 
     $pred_4 = new \Zend\Db\Sql\Predicate\Like('cat1', 2); 
     $where 
      ->orPredicate($pred_1) 
      ->orPredicate($pred_2) 
      ->orPredicate($pred_3) 
      ->orPredicate($pred_4) 
     ; 
     $select->where($where); // attach to the select object. 
});