如何使用'WHEN'条件在laravel查询构建器中添加括号?

时间:2016-11-29 04:42:36

标签: php laravel

鉴于此代码:

$objResellerList - DB::table('ResellerMaster as RM')
  ->leftJoin('StateMaster as SM','SM.id',RM.id_StateMaster')
  ->leftJoin('RegionMaster as REM','REM.id','=','RM.id_RegionMaster')
  ->leftJoin('DealerGroupMaster as DGM','DGM.id','=','RM.id_DealerGroupMaster')
  ->when($keywords, function($query) use ($keywords) {
    return $query->where('RM.company_name', 'like', '%'.$keywords.'%')
      ->orWhere('DGM.name', 'like', '%'.$keywords.'%')
      ->orWhere('RM.email', 'like', '%'.$keywords.'%')
      ->orWhere('RM.pic', 'like', '%'.$keywords.'%')
      ->orWhere('RM.pic_mobile_no', 'like', '%'.$keywords.'%');
  })
  ->when($status, function($query) use ($status) {
    return $query->where('RM.status', $status);
  })
  ->select('RM.*','SM.name as state','REM.name as region', 'DGM.name as dealer_group')
  ->orderby('RM.company_name','asc')
  ->paginate(10);

当我使用关键字进行搜索时,我需要在条件时使用括号将其关闭。如何在条件时包括括号?

1 个答案:

答案 0 :(得分:0)

 DB::table('users')
        ->where('name', '=', 'John')
        ->orWhere(function ($query) {
            $query->where('votes', '>', 100)
                  ->where('title', '<>', 'Admin');
        })
        ->get();

给你括号

从name ='John'或(投票&gt; 100和title&lt;&gt;'Admin')的用户中选择*

所以请使用功能

->orWhere(function ($query) {
            $query->where('votes', '>', 100)
                  ->where('title', '<>', 'Admin');
        })

->where(function ($query) {
            $query->where('votes', '>', 100)
                  ->where('title', '<>', 'Admin');
        })

它会给你括号

使用

->when($status,function($query) {
   return $query->where(function ($query) {
        //do some action
    })
})