簡體   English   中英

ZF2如何orWhere()

[英]ZF2 How to orWhere()

我試圖找出如何使用OR在子句中進行Mysql選擇。 默認情況下,where語句中的所有子句都是AND,並且經過幾個小時的嘗試和失敗后查看網絡無法使其工作。 在ZF1中,它將是一個orWhere(),但在ZF2中沒有。

這是我在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的行是ANDed的行,我希望它們帶有OR。 我應該改變什么?

orWhere中沒有orWhere ,但您可以使用Zend\\Db\\Sql\\Predicate對象的任意組合。 對於OR,使用PredicateSet::COMBINED_BY_ORPredicateSet使用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
    ),
    // ...
));

或者你使用雲:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM