这是一个扩展 Roman Bobrik 和 Eli's 的答案。
目标是让您的请求能够处理默认条件,同时在需要时处理特定请求。
if ($request->input('id') == 1) {$categories = [1,2,3,4];}
if ($request->input('id') == 2) {$categories = [5,4,9];}
$products = \App\Product::where('user', $request->input('id'))
->when(isset($categories), function($query) use($categories) { // This will be applied for specified users. In this case, users id = 1 || 2
return $query->whereNotIn('category', $categories);
})->when(!isset($categories), function($query) { // This will be applied when users id != 1 || 2
return $query->whereNotIn('category', [1,2]); //Define your default categories for every users that are not specified at the begining.
})->get();
您还可以将类别数组保存到用户表并更改 when(Auth::user()->categories != null) 和 when(Auth::user()->categories == null) 的 when() 条件。
唯一的警告是,当您使用这种查询时,您必须有两个完全相反的 when() 条件。因为如果这两个条件都不符合,最终查询将是$products = \App\Product::where('user', $request->input('id'))->get();,我相信您不会发生这种情况。
好吧,您可以链接两个以上的 when() 条件,但请确保有一个可以捕获任何其他条件无法捕获的所有内容。