13

where句にORを使用してMysql Selectを作成する方法を理解しようとしています。デフォルトでは、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は AND された行であり、OR でそれらが必要です。何を変更すればよいですか?

4

2 に答える 2

22

orWhereZF2 にはありませんが、Zend\Db\Sql\Predicateオブジェクトの任意の組み合わせを使用できます。OR の場合、 with で 2 つの述語を使用PredicateSetPredicateSet::COMBINED_BY_ORます。

それに関するドキュメントはあまりありませんが、ソースを閲覧することはできます - 今のところ。

編集:サンプル

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
    ),
    // ...
));
于 2012-10-24T20:29:30.133 に答える
5

またはクラウド使用:

$select->where
    ->like('content','%'.$searchstring.'%')
    ->or
    ->like('title','%'.$searchstring.'%');
于 2012-10-29T23:26:32.383 に答える