IF
ist sehr MySQL-spezifisch, würde ich vorschlagen, stattdessen einen CASE
Ausdruck verwenden, der von allen SQL-Dialekten verstanden wird, die von CakePHP unterstützt werden.
Während die Query Builder verwendet werden können, um jede Art von SQL-Funktionsaufruf zu erstellen, indem Sie einfach eine magische Methode mit dem gleichen Namen über die Funktionen Builder aufrufen, wie:
$minValue = $query->func()->IF([
$query->newExpr()->isNotNull($query->func()->min('brennstoff')),
$query->func()->min('brennstoff'),
0
]);
$maxValue = $query->func()->IF([
$query->newExpr()->isNotNull($query->func()->max('brennstoff')),
$query->func()->max('brennstoff'),
0
]);
oder IFNULL
für etwas kompaktere:
$minValue = $query->func()->IFNULL([
$query->func()->min('brennstoff'),
0
]);
$maxValue = $query->func()->IFNULL([
$query->func()->max('brennstoff'),
0
]);
gibt es konkrete Hilfsmethoden für CASE
Ausdrücke:
$minValue = $query
->newExpr()
->addCase(
[$query->newExpr()->isNotNull($query->func()->min('brennstoff'))],
[$query->func()->min('brennstoff'), 0],
[null, 'integer']
);
$maxValue = $query
->newExpr()
->addCase(
[$query->newExpr()->isNotNull($query->func()->max('brennstoff'))],
[$query->func()->max('brennstoff'), 0],
[null, 'integer']
);
$query = $query
->select([
'minvalue' => $minValue,
'maxvalue' => $maxValue
])
// ...
auch 0
Siehe