Вы должны добавить отношение user
к модели по переписке.
class Penpal extends Model {
...
public function user()
{
return $this->belongsTo(User::class);
}
...
}
Тогда вы можете использовать whereHas
красноречивый метод:
public function index (Request $request){
//query builder
$query = $this->penpalModel->query();
//user fields
if(
$request->name ||
$request->ageMin ||
$request->ageMax ||
($request->gender && $request->gender !== 'all') ||
($request->country && $request->country !== 'all')
){
$query->whereHas('user', function($query) use ($request){
if($request->name){
$query->where('name', 'like', '%' . $request->name . '%');
}
if($request->gender && $request->gender !== 'all'){
$query->where('gender', $request->gender);
}
if($request->country && $request->country !== 'all'){
$query->where('country', $request->country);
}
if($request->ageMin){
$query->where('age', '>', floor($request->ageMin));
}
if($request->ageMax){
$query->where('age', '<', floor($request->ageMax));
}
})
}
//goal
if ($request->goal && $request->goal !== 'all') {
$query->where('goal_id', $request->goal);
}
$penpals = $query
->with('user')
->latest()
->paginate(12);
return view('penpal.index')->with([
'penpals' => $penpals,
'penpalsCount' => $penpals->count() //use $query->count() to get count of all results in db, not only in paginator collection
]);
}
К сожалению, это решение не является 100% копией вашего кода / идеи, потому что оно теряет выбор, но фильтрация будет работать правильно, и вы можете получить доступ к пользователю каждого друга по переписке, например так:
$penpal->user->name //in php
penpal.user.name //in js