1

我正在尝试使用仅返回计算列的 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 中没有被覆盖。

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

4

1 回答 1

2

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

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

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

MuestraQuery::create()
    ->addAsColumn('numEspesores', 'count(distinct muestra.sal_espesor)')
    ->select(['numEsesores'])
    ->find();
于 2017-05-26T14:53:49.687 回答