laravel或where提供意外结果

vyu0f0g1  于 2021-06-20  发布在  Mysql
关注(0)|答案(4)|浏览(284)

我有个问题。

$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;

当我写的时候没有或者没有显示结果,这是可以的,但是当我写的时候或者它给了我数据库的第一列,这是错误的。where和orwhere中的条件与db中的任何列都不匹配。因此,它应该返回空,但它返回的是db的第一列。为什么它会返回一个值,有人遇到过同样的问题吗?

q9rjltbz

q9rjltbz1#

尝试以下代码。

Bidders::where(function ($query) {
         $query->orWhere([  'project_id'  =>    $id
                            'active'      =>    1
                         ])
               ->orWhere('status', 1)
               ->orWhere('status', 3)
               ->orWhere('status', 2);
       })->get();
zujrkrfu

zujrkrfu2#

你应该试试这个:

$bid_check =     Bidders::where('active', 1)
                            ->where('project_id', $id)
                            ->where(function ($query) {
                                   $query->where('status', 1)->orWhere('status', 2);
                             })
                           ->first();
mf98qq94

mf98qq943#

使用where函数更好

Bidders::where(['project_id'=>$id,'active'=>1])
         ->whereIn('status', [1,2])
         ->first();

我认为 orWhere 创建为or子句列表而不是and子句,因此 or project_id = $id or active = 1 or status = 2 如果以上是真的,那么你应该做以下事情

->orWhere(function($query) {
     return $query->where([
       'project_id'  =>    $id,
       'status'      =>    2,
       'active'      =>    1
    ]);
});
j2qf4p5b

j2qf4p5b4#

试试这个:

Bidders::where('project_id', $id)
         ->where('active', 1)
         ->where(function ($query) {
             $query->where('status', 1)
                   ->orWhere('status', 2);
         })->first();

相关问题