ZF2中WHERE子句中如何执行OR,LIKE条件

How to execute OR, LIKE condition in WHERE clause in ZF2

我有这样的查询:

SELECT * FROM `user` WHERE `codedepartment` = <<VALUE>> OR `fullname` LIKE '%<<VALUE>>%'

我在这样的模型中编码:

$sql = new Sql($adapter);
$enim = $sql->select();
$enim->from('user');
$enim->where->equalTo('codedepartment',$jrs)->OR->like('fullname', '%'.$nm_pd.'%');
$statement = $sql->prepareStatementForSqlObject($enim);
$result = $statement->execute();

return $result;

但这不起作用。你能帮帮我吗?

您想要的是创建一个包含两个子句的 where 条件。弄清楚如何对两个 where 子句进行分组并不容易。所以,也许你可以利用 Predicates API.

The where method accepts several different datatypes one of which is a PredicateSet, containing, obviously, Predicates. This allows you to group your where clauses.

ZF2: Writing "advanced" MySQL where clauses MySQL

在你的情况下,你可以试试这个代码:

$sql = new Sql($adapter);
$enim = $sql->select();
$enim->from('user');
// make changes here
$enim->where(array(
        new \Zend\Db\Sql\Predicate\PredicateSet(
          array(
            new \Zend\Db\Sql\Predicate\Operator('codedepartment',
              \Zend\Db\Sql\Predicate\Operator::OPERATOR_EQUAL_TO, $jrs),
            new \Zend\Db\Sql\Predicate\Like('fullname', '%'.$nm_pd.'%'),
          ),
        \Zend\Db\Sql\Predicate\PredicateSet::COMBINED_BY_OR
       )
));

$statement = $sql->prepareStatementForSqlObject($enim);
$result = $statement->execute();

return $result;

您还可以查看 documentation 了解更多详情。

如果可行,请告诉我。