我有一个疑问。
$bid_check = Bidders::where([
'project_id' => $id,
'status' => 1,
'active' => 1,
])
->orWhere([
'project_id' => $id,
'status' => 2,
'active' => 1
])
->first();
print_r($bid_check);die;
当我在没有 orWhere 的情况下编写它时,它没有显示任何结果,这是可以的,但是当我编写 orWhere 时,它给出了数据库的第一列,这是错误的。 where 和 orWhere 中的条件与数据库中的任何列都不匹配。因此,它应该返回空,但它返回数据库的第一列。为什么它返回一个值,有人遇到过同样的问题吗?
最佳答案
如果使用 whereIn 函数会更好
Bidders::where(['project_id'=>$id,'active'=>1])
->whereIn('status', [1,2])
->first();
我认为 orWhere
中的数组是作为 or 子句列表创建的,而不是作为 and 子句创建的,因此您将拥有 or project_id = $id 或 active = 1 或 status = 2
如果上述情况属实,那么您应该执行以下操作
->orWhere(function($query) {
return $query->where([
'project_id' => $id,
'status' => 2,
'active' => 1
]);
});
关于mysql - Laravel 或Where 给出意想不到的结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51925767/