Nando7's avatar

Spatie / laravel-query-builder slow performance

I have a query using the Spatie query builder library:

use Spatie\QueryBuilder\QueryBuilder; use Spatie\QueryBuilder\AllowedFilter; use Spatie\QueryBuilder\AllowedSort;

To use it, you have to wrap your query into QueryBuilder:

$caseFacilities = QueryBuilder::for(PlacementOpportunity::class)
            ->whereIn('facilityId', $facilities->pluck('facilityId'))
            ->whereNotNull('datePoEmailSent')
            ->where('active', 1)
            ->where('caseId', '>', 0)
            ->where('statusId', '>', 0)
            ->where('statusId', '!=', $notSentStatusId)
            ->with('case.client', 'case.resident', 'status', 'facility')
            ->allowedFilters([
                AllowedFilter::custom('query', new FilterProviderCaseFacilities),
                AllowedFilter::custom('facility', new FilterProviderCaseFacilities),
                AllowedFilter::custom('typeOfAdmission', new FilterProviderCaseFacilities),
                AllowedFilter::custom('caseStatus', new FilterProviderCaseFacilities),
                AllowedFilter::custom('placementStatus', new FilterProviderCaseFacilities),
                AllowedFilter::custom('dates', new FilterProviderCaseFacilities),
                AllowedFilter::custom('tourDates', new FilterProviderCaseFacilities),
            ])
            ->defaultSort('-datePoEmailSent');

	return PlacementOpportunityResource::collection($request->has('perPage') ? $caseFacilities->paginate($request->perPage) : $caseFacilities->paginate(config('pagination.per_page')));

This query is veeery slow BUT as soon as I get rid of the of QueryBuilder:: and do it directly with the model (PlacementOpportunity::where()...) it is really fast!

Has anybody faced this slow performance issue with spatie / laravel-query-builder ?

Thanks!

0 likes
1 reply

Please or to participate in this conversation.