Skip to content

Fix N+1 queries across all custom field resources#151

Merged
ManukMinasyan merged 1 commit intorelaticle:mainfrom
NeloNew:fix/comprehensive-n-plus-one-custom-fields
Feb 23, 2026
Merged

Fix N+1 queries across all custom field resources#151
ManukMinasyan merged 1 commit intorelaticle:mainfrom
NeloNew:fix/comprehensive-n-plus-one-custom-fields

Conversation

@NeloNew
Copy link
Copy Markdown
Contributor

@NeloNew NeloNew commented Feb 23, 2026

Problem

Copilot identified in PR #146 that the N+1 query optimization should be applied consistently across all resources that implement HasCustomFields, not just PeopleResource.

When displaying records with custom fields, values were being loaded individually in a loop, causing up to 10-20 separate database queries per page load.

Solution

Added eager loading to all 5 resources using the existing withCustomFieldValues() scope:

PeopleResource - Loads custom field relationships in batch
CompanyResource - Loads custom field relationships in batch
OpportunityResource - Loads custom field relationships in batch
TaskResource - Loads custom field relationships in batch
NoteResource - Loads custom field relationships in batch

This ensures consistent performance optimization across all entity types.

Performance Impact

Before:

  • 10-20+ database queries per page load
  • One query per record for custom field values

After:

  • 1-3 queries total
  • All custom field data batch-loaded via eager loading

Testing

All 722 tests passing (151s duration)
✅ No regressions detected
✅ Eager loading applied consistently to all resources

Related Issues

  • Supersedes PR #146 (PeopleResource only)
  • Supersedes PR #150 (OpportunityResource only)
  • Resolves RELATICLE-CRM-39 (People N+1 query)
  • Resolves RELATICLE-CRM-38 (Opportunities N+1 query)
  • Addresses Copilot's consistency feedback

Files Changed

app/Filament/Resources/CompanyResource.php     | 1 +
app/Filament/Resources/NoteResource.php        | 1 +
app/Filament/Resources/OpportunityResource.php | 1 +
app/Filament/Resources/PeopleResource.php      | 1 +
app/Filament/Resources/TaskResource.php        | 1 +
5 files changed, 5 insertions(+)

Addresses Copilot's feedback on PR relaticle#146 by applying eager loading
optimization consistently across all resources that implement HasCustomFields.

Changes:
- Added ->withCustomFieldValues() to PeopleResource
- Added ->withCustomFieldValues() to CompanyResource
- Added ->withCustomFieldValues() to OpportunityResource
- Added ->withCustomFieldValues() to TaskResource
- Added ->withCustomFieldValues() to NoteResource

Performance impact:
- Before: 10-20+ queries per page load (one per record)
- After: 1-3 queries total (batch loaded)

Related:
- Supersedes PR relaticle#146 (PeopleResource only)
- Supersedes PR relaticle#150 (OpportunityResource only)
- Resolves RELATICLE-CRM-39
- Resolves RELATICLE-CRM-38

Tests: 722 passed, 5 skipped
@ManukMinasyan ManukMinasyan merged commit 71d0777 into relaticle:main Feb 23, 2026
3 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants