我在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();
发生什么事了?这是一个错误吗?有没有人遇到过这个问题?
答案 0 :(得分:1)
你的查询是"让每个Widget的id为x,id为y,id为z(等)"。你想要"让每个Widget的id为x或者id为y或者id为Z"。如果你改变它,它应该工作:
$q = Widgets::where(function($query) use ($array_of_ids){
foreach ($array_of_ids as $key => $value){
$query->orWhere('id', '=', $value);
}
})->get()->toArray();
原因!=正在以另一种方式工作是因为该查询说"得到每个Widget没有id为x且没有id为y且没有id为z(等等)"
虽然实际上有一种更简单的方法:
$q = Widgets::whereIn('id', $array_of_ids)->get()->toArray();