我想知道防止结果集中出现空结果的最佳方法是什么。我正在使用 cake 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)),
(..)
现在,sourcenationalcount 可能会变为空。返回值 0 的最佳方法是什么?我没能找到func()->ifnull()
。我应该使用formatResult()
反而?
函数构建器可以创建任何你想要的函数,你只需要调用它,并且构建器的魔术方法调用处理程序将创建一个通用函数调用,以防没有实现具体方法,即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
See also
- Cookbook > 数据库访问和 ORM > 查询生成器 > 使用 SQL 函数
- Cookbook > 数据库访问和 ORM > 查询生成器 > 使用 SQL 函数 > Case 语句
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)