代码之家  ›  专栏  ›  技术社区  ›  Seb

cakePHP 3查询ifnull

  •  1
  • Seb  · 技术社区  · 7 年前

    我想知道防止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函数的返回放入

    (..)
    'sourcenationalcount' => $query->func()->sum($this->addCase(0, 1)),
    (..)
    

    现在,sourcenationalcount可能会变为null。返回值0的最佳方式是什么。我找不到 func()->ifnull() 。我应该使用 formatResult() 相反

    1 回复  |  直到 7 年前
        1
  •  2
  •   ndm    7 年前

    functions builder可以创建您想要的任何函数,您只需调用它,如果没有实现具体的方法,则builder的magic方法调用处理程序将创建通用函数调用,即 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
    

    另请参见