*/ #[MapInputName(SnakeCaseMapper::class)] #[MapOutputName(SnakeCaseMapper::class)] class FilterScope extends Filter { public function __construct( public bool $ausstand = false, public ?string $billKind = null, public ?int $activityId = null, public ?int $subactivityId = null, public string $search = '', public ?int $groupId = null, ) { } /** * {@inheritdoc} */ public function locks(): array { return []; } /** * @param Builder $query * * @return Builder */ public function apply(Builder $query): Builder { if ($this->ausstand) { $query->whereAusstand(); } if ($this->billKind) { $query->where('bill_kind', BillKind::fromValue($this->billKind)); } if ($this->groupId) { $query->where('group_id', $this->groupId); } if ($this->subactivityId || $this->activityId) { $query->whereHas('memberships', function ($q) { $q->active(); if ($this->subactivityId) { $q->where('subactivity_id', $this->subactivityId); } if ($this->activityId) { $q->where('activity_id', $this->activityId); } }); } return $query; } }