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文字列をvar_dumpしたとき、次の結果が得られました。
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を引用符で囲み、列のように扱います。問題は、それを無効にする方法です。