我有这样的查询:
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;
但那不起作用。你能救我吗?
答案 0 :(得分:2)
您想要的是创建一个包含两个子句的where
条件。弄清楚如何将你的两个where子句分组是不容易的。所以,也许你可以使用Predicates API。
where方法接受几种不同的数据类型,其中一种是 PredicateSet ,显然包含 Predicates 。这允许您将where子句分组。
在您的情况下,您可以尝试以下代码:
$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了解更多详情。
如果有效,请告诉我。