Tabulka
Filtry relací a podřádků
Použijte ->query() s whereHas() pro filtrování podle atributů souvisejícího modelu:
Na této stránce
Filtrování podle relací
Použijte ->query() s whereHas() pro filtrování podle atributů souvisejícího modelu:
// BelongsTo — filtrovat podle souvisejícího modeluSelectFilter::make('category') ->options(Category::orderBy('name')->pluck('name', 'id')->toArray()) ->query(fn (Builder $query, string $value) => $query->whereHas('category', fn ($q) => $q->where('id', $value)) ) // BelongsToManySelectFilter::make('tags') ->options(Tag::orderBy('name')->pluck('name', 'id')->toArray()) ->multiple() ->query(fn (Builder $query, array $values) => $query->whereHas('tags', fn ($q) => $q->whereIn('id', $values)) ) // HasMany (existence) — použijte TernaryFilterTernaryFilter::make('has_comments') ->label('Has Comments') ->query(fn (Builder $q, bool $value) => $value ? $q->has('comments') : $q->doesntHave('comments'))
Filtrování podle hodnot podřádků
Když má tabulka podřádky, označte filtr pomocí subRows() pro
zacílení na dětské záznamy místo rodičovských sloupců. Jedno volání omezí
všechna tři místa najednou:
- rodiče — zredukováni na ty s aspoň jedním odpovídajícím dítětem (
whereHas), - zobrazené podřádky — v rozbaleném panelu se vykreslí jen odpovídající děti,
- rollup agregáty — buňky
->sums()/->counts()(nad stejnou relací jakosubRows()) a jejich celkové součty v patičce počítají jen odpovídající děti, - celkové součty podřádků — souhrny v rozsahu
queryna sloupcích podřádků sečtou v hlavní patičce jen odpovídající děti.
Kompletní rozpracovaný příklad filtrů + rollupů + součtů viz Podřádky — Sestavení diagramu.
$table ->subRows('items') ->filters([ // "Měsíc/Rok" — zobrazit jen faktury s položkami vyfakturovanými ten měsíc, // a jen ty položky uvnitř každé rozbalené faktury DateFilter::make('billed_at')->month()->subRows(), // Funguje jakýkoli typ filtru — tohle spáruje dětský sloupec rovností SelectFilter::make('status') ->options(['open' => 'Open', 'closed' => 'Closed']) ->subRows(), ])
Názvy sloupců filtru odkazují na dětský model. Callback ->query() na filtru
zúženém na podřádky dostane query builder dítěte. Když tabulka nemá nakonfigurovanou
relaci podřádků, subRows() se ignoruje a filtr se chová jako běžný rodičovský filtr.
S více aktivními filtry zúženými na podřádky rodič přežije jen tehdy, když aspoň jedno dítě odpovídá všem dohromady, takže každý přeživší rodič má děti k zobrazení.