首页 > 解决方案 > Laravel whereNull only if the value NULL is selected

问题描述

我需要通过密钥库进行过滤,该密钥可以具有 1、2、3 之类的值……但如果未设置,也可以为 NULL。这些选项有一个select标签,包括 NULL 作为第一个选项,例如,如果选择了 NULL 和 2 选项,我只需要过滤那些未设置 (NULL) 或设置为 2的银行。

public function scopeFilter($query, $params) {
    $query->when(request('query.status', [10, 11]), function ($query, $params) {
            return $query->whereIn('status', $params);
    });

    $query->when(request('query.bank'), function ($query, $params) {
        return $query->whereIn('bank', $params)->orWhereNull('bank');
    });

    return $query;
}

这总是返回未设置银行select的帖子(为 NULL)。只有当标签选择了 NULL 选项时,我才需要显示这些。谢谢!

标签: laraveleloquent

解决方案


好的,我找到了解决方案。现在orWhereNull不影响其他子句。请问能不能简化一点?

$query->when(request('query.bank'), function ($query, $params) {
    return $query->where(function ($query) use ($params) {
        $query->whereIn('bank', $params);

        if (in_array(null, $params)) {
            $query->orWhereNull('bank');
        }
    });
});

推荐阅读