我正在尝试获取模式为easy
和advanced
的记录,但每次仅返回easy
条记录。即那些记录的模式设置为easy。
查询字符串:mywebsite.com/game?easy=easy&advanced=advanced
public function index(Request $request) {
if($request->has('easy') {
return GameMode::where('mode', $request->easy)->get();
}
if($request->has('advanced') {
return GameMode::where('mode', $request->advanced)->get();
}
return GameMode::all();
}
答案 0 :(得分:4)
如果设置了查询,则立即返回模式设置为easy的查询。您可以做的是根据您的请求构建查询,如下所示:
object.Equals(object)
答案 1 :(得分:4)
这意味着您必须创建一个空查询,然后根据输入内容进行构建:
public function index(Request $request) {
$query = GameMode::query();
if($request->has('easy') {
$query->where('mode', $request->easy);
}
if($request->has('advanced') {
$query->orWhere('mode', $request->advanced);
}
return $query->get();
}
有关更多信息,请参考this article。
答案 2 :(得分:4)
尝试在此处使用when
方法
return GameMode::when($request->easy,function($q,$request) {
return $q->where('mode', $request->easy);
})->when($request->advanced,function($q,$request) {
return $q->orWhere('mode', $request->advanced);
})->get();
答案 3 :(得分:3)
解决方案1:
public function index(Request $request) {
if($request->only('easy','advanced')) {
return GameMode::whereIn('mode', $request->only('easy','advanced'))->get();
}
return GameMode::all();
}
解决方案2:
public function index(Request $request) {
if($request->has('easy') && $request->has('advanced')) {
return GameMode::whereIn('mode', [$request->easy, $request->advanced])->get();
}
if($request->has('mode')) {
return GameMode::where('mode', $request->easy)->get();
}
if($request->has('advanced')) {
return GameMode::where('mode', $request->advanced)->get();
}
return GameMode::all();
}
答案 4 :(得分:2)
在这些情况下,我尝试使用scope*
函数
GameMode.php
模型
...
public function scopeEasyMode($q, $easy)
{
if (!empty($easy)) { return $q->orWhere('mode', $easy); }
}
public function scopeAdvanceMode($q, $adv)
{
if (!empty($adv)) { return $q->orWhere('mode', $adv); }
}
...
在您的控制器GameModeController.php
...
$results = GameMode::easyMode($request->easy)->advanceMode($request->advance)->get();
...
这将过滤出您的所需模式或所有
更新:与其将值目录传递给那些scope*
方法,不如您最好先过滤/验证值,这样不容易出错。