我希望使用其tableGateway获得以下类型的ZF2查询。
SELECT IF(column1 LIKE 'text', 1, 0)
FROM table
WHERE (column1 LIKE 'text' OR column2 LIKE 'text') AND status = 1
有可能实现这一目标吗?我尝试了以下内容:
$this->tableGateway->select(function (Select $select) use ($keyword) {
$select->columns(array('id', "IF(column1 LIKE '{$keyword}', 1, 0)"), false)
->where(array(
new Predicate(
array(
new Like('column1', '%'.$keyword.'%'),
new Like('column2', '%'.$keyword.'%')
),
Predicate::COMBINED_BY_OR
),
'status' => 1
));
});
但这会导致错误Unknown column 'IF(column1 LIKE 'test', 1, 0)' in 'field list'
。
有解决方法吗?
修改
当我对sql String进行var_dump-ed时,我得到了以下内容:
SELECT `id` AS `id`, `IF(table.column1 LIKE 'test', 1, 0)` AS `IF(table.column1 LIKE 'test', 1, 0)`
FROM `table`
WHERE (`table`.`column1` LIKE '%test%' OR `table`.`column2` LIKE '%test%')
AND `table`.`status` = '1';
所以它将我的IF放在`引号中并将其视为列。所以问题是如何禁用它?
答案 0 :(得分:1)
感谢this question我明白了。只需将IF语句放在Expression
中,如下所示:
$select->columns(array('id', new Expression("IF(column1 LIKE '{$keyword}', 1, 0)")), false)