2017-05-25 98 views
0

我试图用Propel执行选择,它只返回计算列,但我总是选择其他列。在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 

¿有没有办法在行走只选择计算列?

我见过列在ModelCriteria->doSelect()基于保护ModelCriteria->isSelfSelected属性,它在ModelCriteria->select()设置,但不​​因为它是从标准的,它不是在ModelCriteria重写增加。

不知道这是一个错误还是我正在做一件坏事。

回答

1

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

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

由于行走的流畅API,你不必调用之前addAsColumn方法select方法,所以你甚至可以做到以下几点:

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