在Propel中仅选择计算列

时间:2017-05-25 07:14:23

标签: php propel propel2

我正在尝试使用Propel执行选择,该选择仅返回计算列,但我总是选择其他列。

例如:

$criteria = new MuestraQuery();
$criteria->clearSelectColumns()
    ->addAsColumn('numEspesores', 'count(distinct muestra.sal_espesor)')

结果查询:

 SELECT muestra.sal_id, muestra.sal_regimen, 
        -- ...
        -- (ALL FIELDS OF THE TABLE HERE...)
        -- ...
        count(distinct muestra.sal_espesor) AS numEspesores 
 FROM muestra

我已经能够减少所选字段的数量,仅包括一个字段。例如,此查询仅返回两个字段:

$criteria = new MuestraQuery();
$criteria->clearSelectColumns()
    ->select(MuestraTableMap::COL_SAL_ID)
    ->addAsColumn('numEspesores', 'count(distinct muestra.sal_espesor)')

结果查询:

SELECT count(distinct muestra.sal_espesor) AS numEspesores,
       muestra.sal_id AS "muestra.sal_id" 
FROM muestra

¿Propel中有没有办法只选择计算列?

我看到基于受保护的ModelCriteria->doSelect()属性在ModelCriteria->isSelfSelected中添加了列,该属性在ModelCriteria->select()中设置但在addAsColumn()中未设置,因为它来自Criteria,而不是在ModelCriteria中重写。

不知道这是一个错误还是我做得不好。

1 个答案:

答案 0 :(得分:2)

只需选择您添加的计算列即可。

MuestraQuery::create()
    ->select(['numEspesores'])
    ->addAsColumn('numEspesores', 'count(distinct muestra.sal_espesor)')
    ->find();

由于Propel的流畅api,您无需在select方法之前调用addAsColumn方法,因此您甚至可以执行以下操作:

MuestraQuery::create()
    ->addAsColumn('numEspesores', 'count(distinct muestra.sal_espesor)')
    ->select(['numEsesores'])
    ->find();