searchable(false) ->columns([ TextColumn::make('match_id') ->color('info') ->icon('phosphor-copy') ->copyable() ->sortable() ->searchable( isIndividual: true ), TextColumn::make('ss_player_id') ->sortable() ->label('Player Id') ->color('success') ->icon('phosphor-copy') ->copyable() ->searchable( isIndividual: true, ), TextColumn::make('details.player_name') ->label('Player') ->searchable( isIndividual: true, isGlobal: false, query: function (Builder $query, string $search): Builder { // Wir springen in die verknüpfte MongoDB-Collection ab return $query->whereHas('details', function (Builder $subQuery) use ($search) { // Wichtig: Hier das Feld der FREMD-Collection durchsuchen (z.B. 'name') $subQuery->where('player_name', 'regexp', '/'.$search.'/i'); }); } ), TextColumn::make('event.home.ss_team_name') ->color('primary') ->sortable( query: fn (Builder $query) => $query->orderBy('event.home.ss_team_name') )->searchable( isIndividual: true, isGlobal: false, query: function (Builder $query, string $search): Builder { // 1. SCHRITT: In MariaDB nach passenden User-IDs suchen // Wir nutzen die normalen SQL-Features von MariaDB (LIKE) $matchingTeamIds = StatistikoEvent::whereHas('home', function ($teamQuery) use ($search) { $teamQuery->where('ss_team_name', 'LIKE', "%{$search}%"); }) ->pluck('home_id') // Holt alle IDs der passenden User als flaches Array ->toArray(); // 2. SCHRITT: MongoDB filtern // Wenn MariaDB keine Treffer hatte, erzwingen wir eine leere Tabelle if (empty($matchingTeamIds)) { return $query->where('_id', '=', null); } return $query->whereHas('event', function (Builder $subQuery) use ($matchingTeamIds) { $subQuery->whereIn('home_id', $matchingTeamIds); }); } ), TextColumn::make('event.away.ss_team_name')->color('success') ->sortable( query: fn (Builder $query) => $query->orderBy('ss_team_name') )->searchable( isIndividual: true, // Einzelnes Suchfeld für diese Spalte isGlobal: false, // Globales Suchfeld deaktiviert lassen query: function (Builder $query, string $search): Builder { // 1. SCHRITT: In MariaDB nach passenden User-IDs suchen // Wir nutzen die normalen SQL-Features von MariaDB (LIKE) $matchingTeamIds = StatistikoEvent::whereHas('away', function ($teamQuery) use ($search) { $teamQuery->where('ss_team_name', 'LIKE', "%{$search}%"); }) ->pluck('away_id') // Holt alle IDs der passenden User als flaches Array ->toArray(); // 2. SCHRITT: MongoDB filtern // Wenn MariaDB keine Treffer hatte, erzwingen wir eine leere Tabelle if (empty($matchingTeamIds)) { return $query->where('_id', '=', null); } return $query->whereHas('event', function (Builder $subQuery) use ($matchingTeamIds) { $subQuery->whereIn('away_id', $matchingTeamIds); }); } ), ]) ->emptyStateHeading('No player double in an event') ->deferFilters(false) ->recordActions([ EditAction::make()->iconButton(), DeleteAction::make()->iconButton(), ]); } }