Laravel 雄辩的查询 WhereNotIn 与 WhereNotNull

Posted

技术标签:

【中文标题】Laravel 雄辩的查询 WhereNotIn 与 WhereNotNull【英文标题】:Laravel eloquent query WhereNotIn vs WhereNotNull 【发布时间】:2020-11-03 17:26:16 【问题描述】:

我有一个查询,我想检查列 username 是否既不是 NULL 又不是空字符串。

其中哪一个会更好? 或者它们是等价的?

->WhereNotNull('username')
->Where('username','!=','')

->WhereNotIn('username', [NULL, ''])

【问题讨论】:

我怀疑whereNotIn() 是否可以与null 一起使用,但我从未尝试过。此外,如果您添加更多 where() 子句,您可能希望使用嵌套的 where() 来处理此问题并防止出现问题:->where(function($query) $query->whereNotNull('username')->where('username', '!=', ''); ) ... 第一个,空值需要使用IS NULL 这能回答你的问题吗? Eloquent select rows with empty string or null value Tim Lewis,是的,在签入 mysql 之后,您不能指望 IN(NULL) 等能够正常工作。因此,使用 IS NOT NULL 后跟 !='' 将是正确的继续方式。 【参考方案1】:

我认为最好的选择是:

->WhereNotNull('username')
->Where('username','!=','')

我发现了这个解决方案,但它(就像评论中所说的 N69S)更慢,我发现它here:

->whereRaw('username>""')

此条件将排除 null 值和空值,但除了缓慢之外,它还有些不清楚。

WhereNotIn 带有 null 的数组将不起作用, 请注意,laravel eloquent 会翻译这一行:

->WhereNotIn('username', [NULL, ''])

到:

select * from `users` where `username` not in ('', '')

【讨论】:

该答案未被选为正确答案,因为数据库需要对空字段进行字符串比较,这会使查询变慢,但可以肯定的是,它会得到正确的结果。

以上是关于Laravel 雄辩的查询 WhereNotIn 与 WhereNotNull的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 雄辩的极限查询

带有雄辩查询的 Laravel 分页

laravel 雄辩的关系查询

Laravel 5 雄辩的查询混淆

Laravel 4 雄辩的查询

Laravel:自我 JOIN 的雄辩查询