find($id); if (!$director) { throw (new ModelNotFoundException())->setModel(Director::class, [$id]); } $perPage = max(1, min((int)($params['per_page'] ?? 20), 50)); $q = isset($params['q']) ? trim((string)$params['q']) : ''; $movies = Movie::query() ->whereHas('directors', fn($q2) => $q2->whereKey($director->id)) ->with(['genres']) ->when($q !== '', fn($query) => $query->where('title', 'like', "%{$q}%")) ->latest() ->paginate($perPage); return [ 'entity' => $director, 'movies' => $movies, ]; } }