我想知道在ResultSet中防止null结果的最佳方法是什么。我在吃蛋糕3.5.13,我在用箱子,比如:
private function addCase($isforeign, $source)
{
$query = $this->Sales->find();
return $query->newExpr()
->addCase(
$query->newExpr()->add([
'Sales.isforeign' => $isforeign,
'Sales.source' => $source
]),
1,
'integer');
}然后,我将返回的addCase函数放入
(..)
'sourcenationalcount' => $query->func()->sum($this->addCase(0, 1)),
(..)现在,源计数有可能变为空。返回值0的最佳方法是什么。我找不到func()->ifnull()。我应该用formatResult()代替吗?
发布于 2018-03-06 11:19:41
函数生成器可以创建任何您想要的函数,您只需要调用它,而构建器的神奇方法调用处理程序将创建一个泛型函数调用,以防没有实现具体的方法,即func()->ifnull()只会工作。
但是,IFNULL是MySQL/SQLite特有的,因此为了尽可能地保持可移植性,我建议只使用ELSE大小写,选择0而不是NULL,以防条件评估为FALSE。
$query
->newExpr()
->addCase(
[
$query->newExpr()->add([
'Sales.isforeign' => $isforeign,
'Sales.source' => $source
])
],
[1, 0],
['integer', 'integer']
);它应该生成类似于以下内容的SQL:
CASE WHEN (Sales.isforeign = 0 AND Sales.source = 1) THEN 1 ELSE 0 END另请参阅
https://stackoverflow.com/questions/49129058
复制相似问题