2012-10-24 41 views
13

我想弄清楚如何在哪裏使用OR來創建Mysql Select。默認情況下,where語句中的所有子句都是「與」(AND),經過幾個小時的嘗試和失敗並查找網絡後,都無法使其工作。在ZF1中,它將是一個orWhere(),但ZF2中不存在。ZF2如何orWhere()

這是代碼我有一個AbstracttableGateway內:

$resultSet = $this->select(function (Select $select) use ($searchstring) { 
      $select->join('users','blog_posts.id_user = users.id',array('name')) 
        ->join('blog_categories','blog_posts.id_category = blog_categories.id', array(
              'cat_name' => 'name', 
              'cat_alias' => 'alias', 
              'cat_image' => 'icon')) 
        ->order('date DESC'); 
        //->where("title LIKE '%" .$searchstring . "%' OR content LIKE '%". $searchstring ."%'") 
      $select->where->like('content','%'.$searchstring.'%'); 
      $select->where->like('title','%'.$searchstring.'%'); 
     } 
    ); 
    return $resultSet; 

$select->where->like的線是被相與的那些,我希望他們用OR。我應該改變什麼?

回答

22

ZF2中沒有orWhere,但您可以使用Zend\Db\Sql\Predicate對象的任意組合。或者在PredicateSetPredicateSet::COMBINED_BY_OR中使用2個謂詞。

沒有太多的文檔,但你可以瀏覽源代碼 - 現在。

編輯:樣品

use Zend\Db\Sql\Predicate; 

$select->where(array(
    // ... 
    new Predicate\PredicateSet(
     array(
      new Predicate\Like('content', '%'.$searchstring.'%'), 
      new Predicate\Like('title', '%'.$searchstring.'%'), 
     ), 
     Predicate\PredicateSet::COMBINED_BY_OR 
    ), 
    // ... 
)); 
+0

謝謝你pozs,它將按預期 –

4

,或者你雲使用:

$select->where 
    ->like('content','%'.$searchstring.'%') 
    ->or 
    ->like('title','%'.$searchstring.'%'); 
+0

它看起來簡單,但拋出的通知+錯誤形成我: 未定義的屬性:Zend_Db_Table_Select :: $其中 –

+0

看起來這已被取代? http://stackoverflow.com/a/34861412/184124 – HorusKol