laravel 华丽的选择具有空字符串或空值的行

gdx19jrr  于 2022-11-18  发布在  其他
关注(0)|答案(5)|浏览(124)

我有一个类似$user->albums()->where('col', NULL)的东西,它工作得很好,然后我试着用$user->albums()->where('col', NULL)->or_where('col', '')扩展它到空字符串,它不工作。
我还看到了on this post,我可以使用where_null('col'),但它不工作,it's not documented。任何简单的方法来选择空列或NULL列

dz6r00yl

dz6r00yl1#

尝试对第二个子句使用orWhereNull

$users = DB::table('users')
        ->where('col', '=', '')
        ->orWhereNull('col')
        ->get();

或者,如果查询中有多个条件,则必须将这两个条件包含在闭包中:

$users = DB::table('users')
             ->where(function(\Illuminate\Database\Eloquent\Builder $query) {
                $query->where('col', '')->orWhereNull('col');
            })
            ->where('col2','val2')
            ->get();
8i9zcol2

8i9zcol22#

不如这样吧:

$user->albums()->whereRaw("NOT col > ''")

这样,您可以同时检查两个条件

h22fl7wq

h22fl7wq3#

请尝试以下查询:

$users = DB::table('users')
        ->whereRaw('col = "" OR col IS NULL')
        ->get();
bxpogfeg

bxpogfeg4#

我总是鼓励使用Laravel最常用的主要函数来创建查询。这就是为什么你必须记住两件事:

*算法. key1 = value1 AND key2 = value2 OR key3 = value3.要非常注意优先级,因为在我举例说明的方式中,将有一个主OR,而不是内部带有OR的AND
*使用where()、whereIn()、whereNull和闭包,而不是whereRaw()。whereRaw使用的内存比我提到的任何其他方法都多。

所以,继续你的回答:
OR条件

$users = DB::table('users')
        ->where('col', '=', '')
        ->orWhere('col','=','')
        ->whereNull('col')
        ->get();

AND和OR条件

$users = DB::table('users')
->where(function($query) { $query->where('col','=','')->orWhere('col','=','')->whereNull('col'); })
->where('col','=','')
->get();
qxgroojn

qxgroojn5#

不确定,但这可能有用:

$user->albums()->where_in('col', array(NULL,''));

相关问题