2015-04-06 26 views
0

條款我有這樣的查詢:如何執行或者像條件凡在ZF2

SELECT * FROM `user` WHERE `codedepartment` = <<VALUE>> OR `fullname` LIKE '%<<VALUE>>%' 

和我的代碼模型是這樣的:

$sql = new Sql($adapter); 
$enim = $sql->select(); 
$enim->from('user'); 
$enim->where->equalTo('codedepartment',$jrs)->OR->like('fullname', '%'.$nm_pd.'%'); 
$statement = $sql->prepareStatementForSqlObject($enim); 
$result = $statement->execute(); 

return $result; 

但是,這不是工作。你可以幫我嗎 ?

+0

什麼是構建的sql查詢(嘗試回聲$ sql-> getSqlStringForSqlObject($ enim)) – 2015-04-06 09:18:21

回答

2

你想要的是用兩個子句創建一個where條件。弄清楚如何將你的兩個子句分組,這並不容易。所以,也許你可以利用Predicates API。

的其中方法接受多個不同的數據類型,其中之一是PredicateSet,含有,很明顯,謂詞。這可以讓你將where子句分組。

ZF2: Writing "advanced" MySQL where clauses MySQL

在你的情況,你可以試試這個代碼:

$sql = new Sql($adapter); 
$enim = $sql->select(); 
$enim->from('user'); 
// make changes here 
$enim->where(array(
     new \Zend\Db\Sql\Predicate\PredicateSet(
      array(
      new \Zend\Db\Sql\Predicate\Operator('codedepartment', 
       \Zend\Db\Sql\Predicate\Operator::OPERATOR_EQUAL_TO, $jrs), 
      new \Zend\Db\Sql\Predicate\Like('fullname', '%'.$nm_pd.'%'), 
     ), 
     \Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR 
     ) 
)); 

$statement = $sql->prepareStatementForSqlObject($enim); 
$result = $statement->execute(); 

return $result; 

你也可以看到documentation瞭解更多詳情。

請讓我知道這是否工作。

+0

我在這裏得到錯誤'Predicate \ Operator :: OPERATOR_EQUAL_TO,$ jrs)',並且找不到msg。我還添加'使用Zend \ Db \ Sql \ Sql'。我讀了文檔 – 2015-04-07 01:32:49

+0

@FebryDamatrasetaFairuz嘗試將該行修改爲:'\ Zend \ Db \ Sql \ Predicate \ Operator :: OPERATOR_EQUAL_TO'。如果這不起作用,則可以直接使用運算符'='而不是常量'Predicate \ Operator :: OPERATOR_EQUAL_TO'。我編輯了我的答案,請參閱編輯。 – blackbishop 2015-04-07 09:36:43

+0

它的工作原理,但它只有當我有一個全名的值工作。如果我爲codedepartment設置了一個值,它不起作用(顯示沒有條件的所有記錄),如果我爲全名和codedepartment設置了一個值,它是一樣的。不工作。爲什麼?你能再幫助我嗎? – 2015-04-15 09:33:15