如何在laravel查询生成器中添加和排除where()子句

如何在laravel查询生成器中添加和排除where()子句,laravel,Laravel,如何在laravel查询生成器中添加和排除where子句,以便在一种情况下将其添加到另一种情况下 $orders = DB::table('orders')->select( 'orders.id as id', 'orders.created_at as created', 'u.email as email', 'ud.id as data_id', 'ud.firstName as firstName', 'ud.lastName as lastNa

如何在laravel查询生成器中添加和排除where子句,以便在一种情况下将其添加到另一种情况下

$orders =  DB::table('orders')->select(
'orders.id as id',
'orders.created_at as created',
    'u.email as email',
    'ud.id as data_id',
    'ud.firstName as firstName',
    'ud.lastName as lastName',
    'ud.phone as phone',
    's.name as service',
    's.id as service_id',
    'pt.id as payment_type_id',
    'pt.name as payment_name')
    ->join('users as u', 'orders.user_id', '=', 'u.id')
    ->join('user_data as ud', 'u.id', '=' ,'ud.user_id')
    ->join('payment_types as pt', 'orders.payment_type_id', '=', 'pt.id')
    ->join('services as s', 'orders.service_id', '=', 's.id')
    ->where('u.id', $user->id)->orderBy($sortBy, $type)->get();
我想这样做

$order = DB::table()....
if(true){
  $order->where('id', '=', 1);
}
$order->orderBy('fieldname', 'asc')->get();

但是上面的例子对于您可以使用的条件从句不返回任何结果

when方法仅在第一个 参数为true。如果第一个参数为false,则闭包将 不能执行

$order = DB::table()
       ->yourQuery(...)
       ->when($var, function ($query, $var) {      // <----
           return $query->where('id', '=', 1);     // <----
       }                                           // <----
       ->orderBy('fieldname', 'asc')
       ->get();
$role = $request->input('role');

$users = DB::table('users')
            ->when($role, function ($query, $role) {
                return $query->where('role_id', $role);
            })
            ->get();