Ik denk dat je hier een "en waar"-conditie nodig hebt. Of waar betekent overeenkomen met een van beide of beide regels. "En waar" zou alleen werken als beide regels overeenkomen.
Dus ik stel voor om dit te proberen:
$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();