Выберите только рассчитанные столбцы в 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

Pro Есть ли способ в Propel выбрать только вычисляемые столбцы?

Я видел, столбцы добавляются в ModelCriteria->doSelect() на основе защищенных ModelCriteria->isSelfSelected свойство, которое установлено в ModelCriteria->select() но не в addAsColumn() потому что он из критериев и не переопределяется в ModelCriteria.

Не знаю, если это ошибка или я что-то делаю плохо.

1 ответ

Решение

Просто выберите вычисляемый столбец, который вы добавили.

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

Из-за беглого API Propel вам не нужно называть select метод до addAsColumn метод, так что вы могли бы даже сделать следующее:

MuestraQuery::create()
    ->addAsColumn('numEspesores', 'count(distinct muestra.sal_espesor)')
    ->select(['numEsesores'])
    ->find();
Другие вопросы по тегам