【问题标题】:Laravel eloquent query WhereNotIn vs WhereNotNullLaravel 雄辩的查询 WhereNotIn 与 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
  • Tim Lewis,是的,在签入 MYSQL 之后,您不能指望 IN(NULL) 等能够正常工作。因此,使用 IS NOT NULL 后跟 !='' 将是正确的继续方式。

标签: laravel eloquent


【解决方案1】:

我认为最好的选择是:

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

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

->whereRaw('username>""')

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

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

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

到:

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

【讨论】:

  • 该答案未被选为正确答案,因为数据库需要对空字段进行字符串比较,这会使查询变慢,但可以肯定的是,它会得到正确的结果。
猜你喜欢
  • 2018-05-17
  • 2019-03-14
  • 1970-01-01
  • 1970-01-01
  • 2018-01-26
  • 2021-07-23
  • 2017-11-11
  • 2023-04-05
相关资源
最近更新 更多