我正在尝试使用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中重写。
不知道这是一个错误还是我做得不好。
答案 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();