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

时间:2015-04-06 09:08:21

标签: php sql zend-framework2

我有这样的查询:

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;

但那不起作用。你能救我吗?

1 个答案:

答案 0 :(得分:2)

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

  

where方法接受几种不同的数据类型,其中一种是 PredicateSet ,显然包含 Predicates 。这允许您将where子句分组。

     

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了解更多详情。

如果有效,请告诉我。