Jeg tror, du har brug for "og hvor"-tilstand her. Eller hvor betyder at matche enten den ene eller den anden eller begge regler. "Og hvor" ville kun fungere, hvis begge regler matcher.
Så jeg vil foreslå, at du prøver dette:
$users = User::with('skills')
->with('skills')
->with('positions');
if($skills)
{
$users->whereHas('skills', function($thisquery) use ($skills)
{
$thisquery->whereIn('name', $skills);
});
}
if($positions)
{
$users->whereHas('positions', function($thisquery) use ($positions)
{
$thisquery->whereIn('name', $positions);
});
}
$users = $users->get();