Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/288.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php ZF2如何使用orWhere()_Php_Zend Framework_Zend Framework2 - Fatal编程技术网

Php ZF2如何使用orWhere()

Php ZF2如何使用orWhere(),php,zend-framework,zend-framework2,Php,Zend Framework,Zend Framework2,我试图弄清楚如何使用OR in where子句来创建Mysql Select。默认情况下,where语句中的所有子句都是and,经过几个小时的尝试和失败,查看网络无法使其工作。在ZF1中,它将是一个orWhere(),但在ZF2中没有 这是我在AbstracttableGateway中的代码: $resultSet = $this->select(function (Select $select) use ($searchstring) { $select->

我试图弄清楚如何使用OR in where子句来创建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。我应该更改什么?

ZF2中没有
或where
,但您可以使用
Zend\Db\Sql\Predicate
对象的任意组合。对于
PredicateSet
PredicateSet::COMBINED_BY_或
中的两个谓词,或使用它们

关于它的文档并不多,但您可以浏览源代码-现在

编辑:示例

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.'%');

它看起来更简单,但从我这里抛出通知+错误:未定义属性:Zend\u Db\u Table\u Select::$where