2016-01-22 16 views
2

我想在選擇語句中添加zf2中的列。類似於下面的鏈接(但下面只對ZF1起作用)。有沒有辦法在zf2中做到這一點?如何添加列以在ZF2中選擇語句?

Zend DB Selecting constants - columns that do not exist in table

下面是我的嘗試:

$select->columns("foo" => new \Zend\Db\Sql\Expression('"foo" as type')) 

SQL查詢看起來是這樣的:

select *, 'foo' from bar 

其中foo是所有結果的價值和列的名稱。嘗試上述我得到"Unknown column 'foo' in 'field list'"

非常感謝, 中號

回答

2

我假設type是別名:

試試這個:

$select->columns(array("type" => new \Zend\Db\Sql\Expression("'foo'"))); 
+0

這工作。謝謝! – Matt

2

問題是,該方法$select->columns()覆蓋現有的專欄。

爲了解決這個問題,您可以擴展自己的「select」並添加一個新的方法到「添加」列(因爲Select類的列屬性受保護)。

示例;

CustomSelect.php

class CustomSelect extends \Zend\Db\Sql\Select 
{ 
    /** 
    * @param array $columns 
    * @param bool $prefixColumnsWithTable 
    * @return $this 
    */ 
    public function addColumns(array $columns, $prefixColumnsWithTable = true) { 
     $this->columns = $this->columns + $columns; 
     $this->prefixColumnsWithTable = (bool) $prefixColumnsWithTable; 
     return $this; 
    } 
} 

用法:

$select = new CustomSelect(); 
$select->addColumns(['type' => new \Zend\Db\Sql\Expression("'foo'")]); 
$select->addColumns(['*']); //This is the default value though - so adding after adding shouldn't be nessecary (except if you've used "columns()" before)