我想做可以过滤用户的脚本。问题是我写了一个字段,然后另一个字段不起作用。始终只能处理最后一个请求,而不是全部。如何改变?
if ($request->has('city'))
{
$user = User::with('user_data')->whereHas('user_data', function($query) use ($request) {
return $query->where('residence', $request->city);
})->get();
}
if ($request->has('age_from'))
{
$user = User::with('user_data')->whereHas('user_data', function($query) use ($request) {
return $query->where('date_of_birth', '<=', Carbon::now()->subYears($request->age_from));
})->get();
}
if ($request->has('age_to'))
{
$user = User::with('user_data')->whereHas('user_data', function($query) use ($request) {
return $query->where('date_of_birth', '>=', Carbon::now()->subYears($request->age_to));
})->get();
}
答案 0 :(得分:2)
看起来你的方式不正确。问题不足以完全想象你的问题。
但要解决这个问题,下面的技巧可能对你有帮助。
您可以像这样使用多个whereHas
。
$user = User::with('user_data')->whereHas('user_data', function($query) use ($request) {
return $query->where('residence', $request->city);
})
->whereHas('user_data', function($query) use ($request) {
return $query->where('date_of_birth', '<=', Carbon::now()->subYears($request->age_from));
})
->whereHas('user_data', function($query) use ($request) {
return $query->where('date_of_birth', '>=', Carbon::now()->subYears($request->age_to));
})->get();
如果您想按$request
过滤它,请执行此操作。
$user = User::with('user_data');
if ($request->has('city')) {
$user->whereHas('user_data', function($query) use ($request) {
return $query->where('residence', $request->city);
});
}
if ($request->has('age_from')) {
$user->whereHas('user_data', function($query) use ($request) {
return $query->where('date_of_birth', '<=', Carbon::now()->subYears($request->age_from));
});
}
if($request->has('age_to')){
$user->whereHas('user_data', function($query) use ($request) {
return $query->where('date_of_birth', '>=', Carbon::now()->subYears($request->age_to));
});
}
$user = $user->get();
答案 1 :(得分:0)
通常,当您的HTML中未禁用所有输入字段时,所有输入字段都会显示在请求中,因此它不依赖于字段值以及您对输入变量的可用性的检查使用 has()方法始终为填充和空白输入返回 true 。
所以你需要使用input()方法检查值。
此外,虽然请求中可能有多个输入值,但您需要在获得结果之前将标准添加到模型中:
$user = User::with('user_data');
if ($request->input('city'))
{
$user->whereHas('user_data', function($query) use ($request) {
$query->where('residence', $request->city);
});
}
if ($request->input('age_from'))
{
$user->whereHas('user_data', function($query) use ($request) {
$query->where('date_of_birth', '<=', Carbon::now()->subYears($request->age_from));
});
}
if ($request->input('age_to'))
{
$user->whereHas('user_data', function($query) use ($request) {
$query->where('date_of_birth', '>=', Carbon::now()->subYears($request->age_to));
});
}
$user = $user->get();