From 7a1d95ce6ae4d4a1dbcf1f5b197bca426e491ae0 Mon Sep 17 00:00:00 2001 From: omaresmaeel Date: Fri, 5 Jan 2024 19:41:03 +0200 Subject: [PATCH 1/2] eager load grouped by relations --- packages/tables/src/Concerns/CanGroupRecords.php | 2 ++ packages/tables/src/Grouping/Group.php | 3 +++ 2 files changed, 5 insertions(+) diff --git a/packages/tables/src/Concerns/CanGroupRecords.php b/packages/tables/src/Concerns/CanGroupRecords.php index d2b73f02d4..ac965230a6 100644 --- a/packages/tables/src/Concerns/CanGroupRecords.php +++ b/packages/tables/src/Concerns/CanGroupRecords.php @@ -53,6 +53,8 @@ trait CanGroupRecords return $query; } + $group->applyEagerLoading($query); + return $group->orderQuery($query, $this->getTableGroupingDirection() ?? 'asc'); } } diff --git a/packages/tables/src/Grouping/Group.php b/packages/tables/src/Grouping/Group.php index 6449b24e83..3a2e527909 100644 --- a/packages/tables/src/Grouping/Group.php +++ b/packages/tables/src/Grouping/Group.php @@ -8,6 +8,7 @@ use Closure; use DateTimeInterface; use Filament\Support\Components\Component; use Filament\Support\Contracts\HasLabel as LabelInterface; +use Filament\Tables\Columns\Concerns\InteractsWithTableQuery; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Model; @@ -17,6 +18,8 @@ use Illuminate\Support\Arr; class Group extends Component { + use InteractsWithTableQuery; + protected ?string $column; protected ?Closure $getDescriptionFromRecordUsing = null; From d3ccbeda3f527d92fbd9165dde216e60106b4096 Mon Sep 17 00:00:00 2001 From: Dan Harrin Date: Mon, 8 Jan 2024 10:49:00 +0000 Subject: [PATCH 2/2] wip --- .../tables/src/Concerns/CanGroupRecords.php | 4 +++- packages/tables/src/Grouping/Group.php | 18 +++++++++++++++--- 2 files changed, 18 insertions(+), 4 deletions(-) diff --git a/packages/tables/src/Concerns/CanGroupRecords.php b/packages/tables/src/Concerns/CanGroupRecords.php index ac965230a6..e0e487a32f 100644 --- a/packages/tables/src/Concerns/CanGroupRecords.php +++ b/packages/tables/src/Concerns/CanGroupRecords.php @@ -55,6 +55,8 @@ trait CanGroupRecords $group->applyEagerLoading($query); - return $group->orderQuery($query, $this->getTableGroupingDirection() ?? 'asc'); + $group->orderQuery($query, $this->getTableGroupingDirection() ?? 'asc'); + + return $query; } } diff --git a/packages/tables/src/Grouping/Group.php b/packages/tables/src/Grouping/Group.php index 3a2e527909..21f0088df0 100644 --- a/packages/tables/src/Grouping/Group.php +++ b/packages/tables/src/Grouping/Group.php @@ -8,7 +8,6 @@ use Closure; use DateTimeInterface; use Filament\Support\Components\Component; use Filament\Support\Contracts\HasLabel as LabelInterface; -use Filament\Tables\Columns\Concerns\InteractsWithTableQuery; use Filament\Tables\Table; use Illuminate\Database\Eloquent\Builder as EloquentBuilder; use Illuminate\Database\Eloquent\Model; @@ -18,8 +17,6 @@ use Illuminate\Support\Arr; class Group extends Component { - use InteractsWithTableQuery; - protected ?string $column; protected ?Closure $getDescriptionFromRecordUsing = null; @@ -457,4 +454,19 @@ class Group extends Component { return $this->isDate; } + + public function applyEagerLoading(EloquentBuilder $query): EloquentBuilder + { + if (! $this->getRelationship($query->getModel())) { + return $query; + } + + $relationshipName = $this->getRelationshipName(); + + if (array_key_exists($relationshipName, $query->getEagerLoads())) { + return $query; + } + + return $query->with([$relationshipName]); + } }