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.
在你的情况下,你可以试试这个代码:
$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 了解更多详情。
如果可行,请告诉我。
我有这样的查询:
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.
在你的情况下,你可以试试这个代码:
$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 了解更多详情。
如果可行,请告诉我。