2013-09-24 71 views
1

我想通過使用它的tableGateway獲得ZF2以下類型的查詢。ZF2表逍遙法外選擇IF()列

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'; 

所以它把我的中頻`報價和對待它像列。所以問題是如何禁用?

回答

1

感謝this question我明白了。只需要把Expression的IF語句如下:

$select->columns(array('id', new Expression("IF(column1 LIKE '{$keyword}', 1, 0)")), false)