filterTableQuery($this->getTable()->getQuery()); } public function filterTableQuery(Builder $query): Builder { $this->applyFiltersToTableQuery($query); $this->applySearchToTableQuery($query); foreach ($this->getTable()->getColumns() as $column) { if ($column->isHidden()) { continue; } $column->applyRelationshipAggregates($query); if ($this->getTable()->isGroupsOnly()) { continue; } $column->applyEagerLoading($query); } return $query; } public function getFilteredSortedTableQuery(): Builder { $query = $this->getFilteredTableQuery(); $this->applyGroupingToTableQuery($query); $this->applySortingToTableQuery($query); return $query; } public function getTableQueryForExport(): Builder { $query = $this->getTable()->getQuery(); $this->applyFiltersToTableQuery($query); $this->applySearchToTableQuery($query); $this->applySortingToTableQuery($query); return $query; } protected function hydratePivotRelationForTableRecords(Collection | Paginator | CursorPaginator $records): Collection | Paginator | CursorPaginator { $table = $this->getTable(); $relationship = $table->getRelationship(); if ($table->getRelationship() instanceof BelongsToMany && ! $table->allowsDuplicates()) { invade($relationship)->hydratePivotRelation($records->all()); } return $records; } public function getTableRecords(): Collection | Paginator | CursorPaginator { if ($translatableContentDriver = $this->makeFilamentTranslatableContentDriver()) { $setRecordLocales = function (Collection | Paginator | CursorPaginator $records) use ($translatableContentDriver): Collection | Paginator | CursorPaginator { $records->transform(fn (Model $record) => $translatableContentDriver->setRecordLocale($record)); return $records; }; } else { $setRecordLocales = fn (Collection | Paginator | CursorPaginator $records): Collection | Paginator | CursorPaginator => $records; } if ($this->cachedTableRecords) { return $setRecordLocales($this->cachedTableRecords); } $query = $this->getFilteredSortedTableQuery(); if ( (! $this->getTable()->isPaginated()) || ($this->isTableReordering() && (! $this->getTable()->isPaginatedWhileReordering())) ) { return $setRecordLocales($this->cachedTableRecords = $this->hydratePivotRelationForTableRecords($query->get())); } return $setRecordLocales($this->cachedTableRecords = $this->hydratePivotRelationForTableRecords($this->paginateTableQuery($query))); } protected function resolveTableRecord(?string $key): ?Model { if ($key === null) { return null; } if (! ($this->getTable()->getRelationship() instanceof BelongsToMany)) { return $this->getFilteredTableQuery()->find($key); } /** @var BelongsToMany $relationship */ $relationship = $this->getTable()->getRelationship(); $pivotClass = $relationship->getPivotClass(); $pivotKeyName = app($pivotClass)->getKeyName(); $table = $this->getTable(); $this->applyFiltersToTableQuery($relationship->getQuery()); $query = $table->allowsDuplicates() ? $relationship->wherePivot($pivotKeyName, $key) : $relationship->where($relationship->getQualifiedRelatedKeyName(), $key); $record = $table->selectPivotDataInQuery($query)->first(); return $record?->setRawAttributes($record->getRawOriginal()); } public function getTableRecord(?string $key): ?Model { $record = $this->resolveTableRecord($key); if ($record && filled($this->getActiveTableLocale())) { $this->makeFilamentTranslatableContentDriver()->setRecordLocale($record); } return $record; } public function getTableRecordKey(Model $record): string { $table = $this->getTable(); if (! ($table->getRelationship() instanceof BelongsToMany && $table->allowsDuplicates())) { return $record->getKey(); } /** @var BelongsToMany $relationship */ $relationship = $table->getRelationship(); $pivotClass = $relationship->getPivotClass(); $pivotKeyName = app($pivotClass)->getKeyName(); return $record->getAttributeValue($pivotKeyName); } public function getAllTableRecordsCount(): int { if ($this->cachedTableRecords instanceof LengthAwarePaginator) { return $this->cachedTableRecords->total(); } return $this->getFilteredTableQuery()->count(); } public function flushCachedTableRecords(): void { $this->cachedTableRecords = null; } /** * @deprecated Override the `table()` method to configure the table. */ public function allowsDuplicates(): bool { return $this->allowsDuplicates; } /** * @deprecated Override the `table()` method to configure the table. */ public function getTableRecordTitle(Model $record): ?string { return null; } /** * @deprecated Override the `table()` method to configure the table. */ public function getTableModelLabel(): ?string { return null; } /** * @deprecated Override the `table()` method to configure the table. */ public function getTablePluralModelLabel(): ?string { return null; } }