如何在ZF2中为select语句添加列?

时间:2016-01-22 02:05:14

标签: php mysql zend-framework zend-framework2

我正在尝试将zf2中的列添加到select语句中。类似于下面的链接(但下面似乎只适用于ZF1)。有没有办法在zf2中这样做?

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

以下是我的尝试:

bjobs

SQL Query如下所示:

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

其中foo是所有结果的列的值和名称。试着上面我得select *, 'foo' from bar

非常感谢, 中号

2 个答案:

答案 0 :(得分:3)

我假设type是别名:

试试这个:

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

答案 1 :(得分:3)

问题是方法$select->columns()会覆盖现有列。

要解决此问题,您可以扩展自己的“select”并添加一个新方法来“添加”列(因为Select类的columns属性受到保护)。

实施例

<强> 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)