首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >cakePHP 3查询ifnull

cakePHP 3查询ifnull
EN

Stack Overflow用户
提问于 2018-03-06 10:52:59
回答 1查看 902关注 0票数 1

我想知道在ResultSet中防止null结果的最佳方法是什么。我在吃蛋糕3.5.13,我在用箱子,比如:

代码语言:javascript
复制
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函数放入

代码语言:javascript
复制
(..)
'sourcenationalcount' => $query->func()->sum($this->addCase(0, 1)),
(..)

现在,源计数有可能变为空。返回值0的最佳方法是什么。我找不到func()->ifnull()。我应该用formatResult()代替吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-06 11:19:41

函数生成器可以创建任何您想要的函数,您只需要调用它,而构建器的神奇方法调用处理程序将创建一个泛型函数调用,以防没有实现具体的方法,即func()->ifnull()只会工作。

但是,IFNULL是MySQL/SQLite特有的,因此为了尽可能地保持可移植性,我建议只使用ELSE大小写,选择0而不是NULL,以防条件评估为FALSE

代码语言:javascript
复制
$query
    ->newExpr()
    ->addCase(
        [
            $query->newExpr()->add([
                'Sales.isforeign' => $isforeign,
                'Sales.source' => $source
            ])
        ],
        [1, 0],
        ['integer', 'integer']
    );

它应该生成类似于以下内容的SQL:

代码语言:javascript
复制
CASE WHEN (Sales.isforeign = 0 AND Sales.source = 1) THEN 1 ELSE 0 END

另请参阅

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49129058

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档