我在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();