cakephp3查询ifnull
我想知道防止ResultSet中出现空结果的最佳方法是什么。我在蛋糕3.5.13上,我在使用案例,比如:cakephp3查询ifnull,cakephp,cakephp-3.0,resultset,query-builder,ifnull,Cakephp,Cakephp 3.0,Resultset,Query Builder,Ifnull,我想知道防止ResultSet中出现空结果的最佳方法是什么。我在蛋糕3.5.13上,我在使用案例,比如: private function addCase($isforeign, $source) { $query = $this->Sales->find(); return $query->newExpr() ->addCase( $query->newExpr()->add([
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)),
(..)
现在,sourcenationalcount可能会变为null。返回值0的最佳方式是什么。我找不到
func()->ifnull()
。我应该改用formatResult()
吗?函数生成器可以创建您想要的任何函数,您只需调用它,如果没有实现具体方法,生成器的magic method调用处理程序将创建一个通用函数调用,即func()->ifnull()
但是,IFNULL
是特定于MySQL/SQLite的,因此为了尽可能地保持可移植性,我建议只使用一个ELSE
案例,如果条件评估为FALSE
,则选择0
而不是NULL
$query
->newExpr()
->addCase(
[
$query->newExpr()->add([
'Sales.isforeign' => $isforeign,
'Sales.source' => $source
])
],
[1, 0],
['integer', 'integer']
);
生成的SQL类似于:
当(Sales.isforeign=0和Sales.source=1)然后为1,否则为0结束时的情况
另见
(SUM(CASE-When(Sales.isforeign=:c11和Sales.source=:c12)然后:param13 END))作为sourcenationalcount
。“我不会得到其他部分。@Seb您可能没有正确地更改它,从这里我看不出来。示例代码段按预期工作,您应该能够复制并粘贴它。我真傻!我错过了$query->newExpr()…
周围的数组。非常感谢ndm!:)