53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
			
		
		
	
	
			53 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			PHP
		
	
	
	
| <?php
 | |
| 
 | |
| namespace App\Membership;
 | |
| 
 | |
| use App\Lib\Filter;
 | |
| use App\Member\Membership;
 | |
| use Illuminate\Database\Eloquent\Builder;
 | |
| 
 | |
| /**
 | |
|  * @extends Filter<Membership>
 | |
|  */
 | |
| class FilterScope extends Filter
 | |
| {
 | |
|     /**
 | |
|      * @param array<int, int> $activities
 | |
|      * @param array<int, int> $subactivities
 | |
|      * @param array<int, int> $groups
 | |
|      */
 | |
|     public function __construct(
 | |
|         public array $activities = [],
 | |
|         public array $subactivities = [],
 | |
|         public array $groups = [],
 | |
|         public ?bool $active = true,
 | |
|     ) {}
 | |
| 
 | |
|     public function getQuery(): Builder
 | |
|     {
 | |
|         $query = Membership::orderByRaw('member_id, activity_id, subactivity_id');
 | |
| 
 | |
|         if ($this->active === true) {
 | |
|             $query = $query->active();
 | |
|         }
 | |
| 
 | |
|         if ($this->active === false) {
 | |
|             $query = $query->inactive();
 | |
|         }
 | |
| 
 | |
|         if (count($this->groups)) {
 | |
|             $query = $query->whereIn('group_id', $this->groups);
 | |
|         }
 | |
| 
 | |
|         if (count($this->activities)) {
 | |
|             $query = $query->whereIn('activity_id', $this->activities);
 | |
|         }
 | |
| 
 | |
|         if (count($this->subactivities)) {
 | |
|             $query = $query->whereIn('subactivity_id', $this->subactivities);
 | |
|         }
 | |
| 
 | |
|         return $query;
 | |
|     }
 | |
| }
 |