我有一个搜索功能,可以根据用户输入的过滤器(从/到年龄、从/到身高)搜索用户。问题是年龄列位于用户表(用户模型)中,身高列位于用户配置文件表(用户配置文件模型)中。我可以轻松地从每个模型中单独获取结果,但我想在结合这两个条件时获取结果。例如,获取年龄在 30 岁到 40 岁、身高在 180 厘米到 190 厘米之间的用户。任何帮助表示赞赏。这是我的代码。
搜索控制器.php
class SearchController extends Controller
{
public function search(Request $request, User $user)
{
$query = User::query(); // HERE I NEED TO FETCH USER PROFILE COLUMNS FROM MODEL ALONG WITH USER
dd($query);
// HEIGHT SETTING
if ($request->has('from_cm')) {
$request->get('from_cm');
}
if ($request->has('to_cm')) {
$request->get('to_cm');
}
if ($request->from_cm && $request->to_cm) {
$query->whereBetween('height', [$request->from_cm, $request->to_cm]);
} elseif ($request->from_cm) {
$query->where('height', '>=', $request->from_cm);
} elseif ($request->to_cm) {
$query->where('height', '<=', $request->to_cm);
}
// AGE SETTING
if ($request->has('from_age')) {
$request->get('from_age');
}
if ($request->has('to_age')) {
$request->get('to_age');
}
if ($request->from_age && $request->to_age) {
$query->whereBetween('age', [$request->from_age, $request->to_age]);
} elseif ($request->from_age) {
$query->where('age', '>=', $request->from_age);
} elseif ($request->to_age) {
$query->where('age', '<=', $request->to_age);
}
$results = $query->get();
//dd($results);
}
}
用户.php
protected $fillable = [
'username',
'email',
'first_name',
'last_name',
'age',
];
public function userProfile()
{
return $this->hasOne(UserProfile::class);
}
用户配置文件.php
protected $fillable = [
'user_id',
'interested_in',
'height',
];
public function user()
{
return $this->belongsTo(User::class);
}
因此,需要明确的是,我不需要特定用户及其用户配置文件,而是将用户和用户配置文件模型中的列连接到一个变量($query)中。
米琪卡哇伊
qq_遁去的一_1