Как получить функцию MAX и / или MIN Aggregate mysql с Propel? - PullRequest
1 голос
/ 13 июня 2019

Я пытаюсь получить результаты этого запроса:

// SELECT MIN(`inventory_date`) FROM `tour_cms_inventory` WHERE extra_id = 52

с этим кодом:

$min = TourCmsInventoryQuery::create()
                    ->withColumn('MIN(inventory_date)')
                    ->filterByExtraId($tour->getId())
                    ->groupByExtraId()
                    ->find();

Но я получаю эту ошибку:

Fatal error: Uncaught PDOException: SQLSTATE[42000]: Syntax error or access violation: 1140 In aggregated query without GROUP BY, expression #1 of SELECT list contains nonaggregated column 'mkte_circuitos_imp.tour_cms_inventory.id'; this is incompatible with sql_mode=only_full_group_by in C:\laragon\www\mkte_circuitos\vendor\propel\propel\src\Propel\Runtime\Connection\StatementWrapper.php:194

Я полагаю, что Propel добавляет pk (id) (mkte_circuitos_imp.tour_cms_inventory.id) в выборку.

Что я делаю не так?

С наилучшими пожеланиями

EDIT Я также попробую это:

$con = \Propel\Runtime\Propel::getWriteConnection(TourCmsInventoryTableMap::DATABASE_NAME);
            $con->useDebug(true);

            $sql = 'SELECT MIN(inventory_date) FROM tour_cms_inventory WHERE extra_id=:extra_id';

            $stmt = $con->prepare($sql);

            $rs = $stmt->execute([':extra_id'=>$tour->getId()]);

но ... верно возвращается !!

1 Ответ

0 голосов
/ 24 июля 2019

Вам нужен псевдоним для вашей агрегатной функции, попробуйте:

$min = TourCmsInventoryQuery::create()
   ->withColumn('MIN(inventory_date)', 'MinInventoryDate')
   ->filterByExtraId($tour->getId())
   ->groupByExtraId()
   ->find();
...