Eu acho que você precisa da condição "e onde" aqui. Ou where significa combinar uma ou outra ou ambas as regras. "E onde" só funcionaria se ambas as regras coincidirem.
Então sugiro tentar isso:
$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();