Нужно ли разделять локальный scope на два в зависимости от количества значений в аргументе?
Никакого "правильнее" в данном вопросе нет и быть не может. Может быть "понятнее для других" и "поддерживеемее". По второму разницы нет, по первому я предпочитаю такой вариант:
public function scopeByPartnerId($query, int|array $partnerId)
{
    if (is_countable($partnerId)) {
        $query->whereIn('partner_id', $partnerId);
    } else {
        $query->where('partner_id', $partnerId);
    }
}
И, разумеется, в самом классе описан doc-block для этого метода, в котором тоже корректные типы аргументов указаны.
Partner отношение? Тогда правильнее использовать методы отношений
$partner->relations
whereHas, with итд