Select Propel 中仅计算列

Select only calculated columns in Propel

我正在尝试使用 Propel 执行 selection,其中 returns 仅计算列,但我总是有其他列 selected.

例如:

$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

我已经能够减少 selected 字段的数量,仅包括一个字段。比如这个查询returns只有两个字段:

$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 中有没有办法只 select 计算列?

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

不知道这是一个错误还是我做错了什么。

只是 select 您添加的计算列。

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

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

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