2013-07-14 7 views
0

Est-ce que quelqu'un voit le problème avec cela?Zend Framework 2 sélectionnez ou

Je suis en train d'utiliser prédicat pour comparer les nombres entiers dans une déclaration qui devrait ressembler à ceci

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

ce que j'ai

$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 est un objet, mais il retourne tous les résultats de la table, sans filtrage

+0

La ligne '$ pred_4 = nouveau \ Zend \ Db \ Sql \ Prédire \ Like ('cat1', 2);' a cat1 au lieu de cat2. Cela pourrait-il être un problème? – akond

+0

Ne devez-vous pas connecter le '$ where' au' $ select' d'une façon ou d'une autre? Comme '$ select-> where-> ouPredicate (...)' –

Répondre

1

Jetez un oeil à la documentation et vous trouverez tout ce dont vous avez besoin http://framework.zend.com/manual/2.0/en/modules/zend.db.sql.html#zend-db-sql-select.

Zend effectuera la majeure partie du travail pour vous, vous avez juste besoin de fournir un tableau.

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

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

Le \Zend\Db\Sql\Predicate\PredicateSet::OP_OR est la partie importante dans votre cas.

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. 
});