我想使用 ZF2 的 tableGateway 获得以下类型的查询。
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'
。有解决方法吗?
编辑
当我 var_dump-ed sql 字符串时,我得到以下信息:
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 放在`引号中并将其视为列。所以问题是如何禁用它?