cakePHP 3 查询 ifnull
cakePHP 3 Query ifnull
我想知道防止 ResultSet 中出现空结果的最佳方法是什么。我在蛋糕 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 函数的 return 放入
(..)
'sourcenationalcount' => $query->func()->sum($this->addCase(0, 1)),
(..)
现在 sourcenationalcount 可能变为空。 return 值 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
另见
我想知道防止 ResultSet 中出现空结果的最佳方法是什么。我在蛋糕 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 函数的 return 放入
(..)
'sourcenationalcount' => $query->func()->sum($this->addCase(0, 1)),
(..)
现在 sourcenationalcount 可能变为空。 return 值 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
另见