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的主要内容,如果未能解决你的问题,请参考以下文章