3

zf2以降、Zend \ Dbを使用したクエリでは、orWhereは使用できなくなりました(ZF2 How to orWhere())。これを置き換えることができます。私の例では、「like」はなく、次のようなクエリのみがあります。

$select->where("....")->orWhere("...")

PredicateSetを使用することが唯一の方法である場合、それを使用してクエリを作成するにはどうすればよいですか?

4

4 に答える 4

5

最も簡単な方法は、流暢な表記法を使用することです。

$where = new Zend\Db\Sql\Where;
$where->OR->equalTo('id', $id);

疑問がある場合は、ラルフがZend_Db-Examplesリポジトリ(https://github.com/ralphschindler/Zend_Db-Examples)に投稿した例を確認してください。

于 2012-11-20T15:04:24.103 に答える
3

orPredicateは、次のようにWhere()に対して使用できます。

public function fetchLike($keyword)
{
    $where = new \Zend\Db\Sql\Where();
    $pred_url      = new \Zend\Db\Sql\Predicate\Like('url', '%' . $keyword . '%');
    $pred_notes    = new \Zend\Db\Sql\Predicate\Like('notes', '%' . $keyword . '%');
    $pred_username = new \Zend\Db\Sql\Predicate\Like('username', '%' . $keyword . '%');
    $where->orPredicate($pred_url)->orPredicate($pred_notes)->orPredicate($pred_username);

    $resultSet = $this->tableGateway->select($where);

    return $resultSet;
}

もちろん、私が使用したような述語の代わりに、 lessThanOrEqualToequalToなどの述語を使用できます。orPredicateの代わりにandPredicateを使用することもできます。

述語に関するZF2の情報については、ここをクリックしてください

また、名前空間を適切な方法で使用することをお勧めします。

use \Zend\Db\Sql\Predicate\Like;
use \Zend\Db\Sql\Where;
// Now you can use code like this:
$pred_url      = new Like('url', '%' . $keyword . '%');
// Instead of
$pred_url      = new \Zend\Db\Sql\Predicate\Like('url', '%' . $keyword . '%');
于 2013-05-02T12:40:27.503 に答える
0

これは現在、orPredicate()「内のコードを参照」と呼ばれていますZend\Db\Sql\Predicate\Predicate.php

関数については、Zend \ Db \ Sql \ Selectのドキュメントも参照してください。この関数は、またはwhere()の組み合わせを定義する2番目のパラメーターを渡すことができます。ANDOR

于 2012-11-19T17:42:59.787 に答える
0

たとえば、LIKEを使用しない場合は、次のように実行できます(自分で解決策をかなり探していました)。

    $select->where(
        array(
            new \Zend\Db\Sql\Predicate\PredicateSet(array(
                new \Zend\Db\Sql\Predicate\Operator('first_column', \Zend\Db\Sql\Predicate\Operator::OPERATOR_EQUAL_TO, $some_value),
                new \Zend\Db\Sql\Predicate\Operator('second_column', \Zend\Db\Sql\Predicate\Operator::OPERATOR_EQUAL_TO, $some_value)
                /* even more columns to compare this way... */
            ), 
            \Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR)
        )
    );
于 2015-10-02T18:48:11.187 に答える