Ich denke, Sie brauchen hier die Bedingung "und wo". Oder wo bedeutet, dass entweder die eine oder andere oder beide Regeln übereinstimmen. "Und wo" würde nur funktionieren, wenn beide Regeln übereinstimmen.
Ich würde also vorschlagen, Folgendes zu versuchen:
$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();