soggetto?->id_soggetto) && is_numeric($user->soggetto->id_soggetto)) { return (int) $user->soggetto->id_soggetto; } if (isset($user->soggetto?->id) && is_numeric($user->soggetto->id)) { return (int) $user->soggetto->id; } return null; } protected function resolveUserUnita(?User $user): Collection { if (! $user) { return collect(); } $soggettoId = $this->resolveSoggettoId($user); $query = UnitaImmobiliare::query() ->with(['stabile', 'soggetti']) ->where(function ($q) use ($soggettoId, $user): void { if ($soggettoId) { $q->whereHas('soggetti', function ($qp) use ($soggettoId): void { $qp->where('soggetti.id', $soggettoId); }); } $email = trim((string) $user->email); if ($email !== '') { $q->orWhereIn('id', function ($sub) use ($email): void { $sub->select('ai.unita_immobiliare_id') ->from('affitti_immobili as ai') ->join('rubrica_universale as ru', 'ru.id', '=', 'ai.rubrica_inquilino_id') ->whereNotNull('ai.unita_immobiliare_id') ->whereRaw('LOWER(ru.email) = ?', [mb_strtolower($email)]); }); } }); return $query->orderBy('stabile_id')->orderBy('scala')->orderBy('interno')->get(); } }