Level 2
why not use Model::when() https://laravel.com/docs/queries#conditional-clauses
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!
Please or to participate in this conversation.