Laravel等于返回空的In Where子句


Laravel Equals Returning Empty In Where Clause

我在Laravel中遇到了一个奇怪的问题,等号在where子句中不返回任何值。但最奇怪的是,如果我使用相反,我得到了结果!

小工具表

+----+-------------+-------------+
| id |    title    | widget_data |
+----+-------------+-------------+
| 1  |  my widget  |     xyz     |
+----+-------------+-------------+
| 2  |  the widget |     xyz     |
+----+-------------+-------------+
| 3  |  da widget  |     xyz     |
+----+-------------+-------------+
| 4  |  our widget |    xyz...   |
+----+-------------+-------------+
| 5  |  etc...     |    etc...   |
+----+-------------+-------------+

$array_of_ids

array(
   [0] => 2,
   [1] => 3
)

这是我的代码。返回一个空数组(但应返回第2行和第3行)

$q = Widgets::where(function($query) use ($array_of_ids){
   foreach ($array_of_ids as $key => $value){
     $query->where('id', '=', $value);
   }
})->get()->toArray();

代码相同,但带有!=相反,返回第1、4和5行…(应该如此)

$q = Widgets::where(function($query) use ($array_of_ids){
   foreach ($array_of_ids as $key => $value){
     $query->where('id', '!=', $value);
   }
})->get()->toArray();

发生了什么事??这是个虫子吗?以前有人遇到过这个问题吗?

您的查询是说"获取每个id为x、id为y、id为z的Widget(等等)"。您想要"获取每个id为x、id为y或id为z的Widget"。如果你改成这样,它应该会起作用:

$q = Widgets::where(function($query) use ($array_of_ids){
   foreach ($array_of_ids as $key => $value){
     $query->orWhere('id', '=', $value);
   }
})->get()->toArray();

原因!=另一种方式是因为该查询说"获取每个没有id x、没有id y、没有id z的Widget(等等)"

实际上有一种更简单的方法:

$q = Widgets::whereIn('id', $array_of_ids)->get()->toArray();