$groupIds */ public static function assignedToClient(User $client, array $groupIds): QueryBuilder { $userMorph = (new User)->getMorphClass(); $groupMorph = (new Group)->getMorphClass(); return FileAssignment::query()->toBase() ->select('file_id') ->where(function (QueryBuilder $query) use ($client, $groupIds, $userMorph, $groupMorph): void { $query->where(function (QueryBuilder $direct) use ($client, $userMorph): void { $direct->where('assignable_type', $userMorph)->where('assignable_id', $client->id); })->orWhere(function (QueryBuilder $viaGroup) use ($groupIds, $groupMorph): void { $viaGroup->where('assignable_type', $groupMorph)->whereIn('assignable_id', $groupIds); }); }); } /** * File ids assigned to any of $groupIds. * * @param list|Collection $groupIds */ public static function assignedToGroups(iterable $groupIds): QueryBuilder { $groupMorph = (new Group)->getMorphClass(); return FileAssignment::query()->toBase() ->select('file_id') ->where('assignable_type', $groupMorph) ->whereIn('assignable_id', $groupIds instanceof Collection ? $groupIds->all() : $groupIds); } }