php - Laravel Spatie Custom Filter by Relation Last Element
one text
Solution:
I solved the problem this:
<?php
use App\Models\Examination;
use Spatie\QueryBuilder\Filters\Filter;
use Illuminate\Database\Eloquent\Builder;
class SickAnimalsFilter implements Filter
{
public function __invoke(Builder $query, $value, string $property)
{
$examinationIds = $query->withMax('examinations', 'id')->get()->pluck('examinations_max_id');
$animalIds = Examination::query()->groupBy('animal_id', 'id')->get()->whereIn('id', $examinationIds)->where('disease_id', '!=', null)->pluck('animal_id');
$query->whereIn('id', $animalIds);
}
}
I got each animals last examination ids and write to $examinationIds
.
And filter Examinations with $examinationIds
.
After filtering get animal ids with pluck('animal_id')
.
And then filter the $query
with $animalIds
.