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

另见