ZF2 - Zend \ Db \ Sql \ Sql - 表达式中的表达式

时间:2014-10-30 11:28:33

标签: php zend-framework2

假设我有一个包含两列id,name的简单查找表。我想从表中选择一组给定的名称。另外,我希望name列的比较不区分大小写。

例如,我有一个小写名称'apple','orange','banana'的数组,并希望执行如下查询:

SELECT id FROM lookup_table WHERE LOWER(name) IN ('apple','orange','banana').

到目前为止,我有以下代码来创建语句并正确绑定我的名称数组:

$sql = new Sql($this->adapter);
*$select = $sql->select();*
$select->from('lookup_table')
       ->columns(array('id'))
       ->where(new \Zend\Db\Sql\Predicate\In('name',array('apple','orange','banana')));

$result = $sql->prepareStatementForSqlObject($select)->execute();

$returnArray = array();
foreach ($result as $r) {
    $returnArray[] = $r['id'];
}

return $returnArray;

我无法解决的问题是在where子句中的名称列周围包装LOWER()函数。我认为你不能将表达式传递给Zend \ Db \ Sql \ Predicate \ In的标识符部分。

有什么想法吗?

:WQ

1 个答案:

答案 0 :(得分:0)

您可以使用类似

的内容
$select->where->expression('lower(name) IN (?)', array('apple','orange','banana'));