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