Showing
2 changed files
with
10 additions
and
9 deletions
| ... | @@ -43,15 +43,9 @@ class Article extends Model | ... | @@ -43,15 +43,9 @@ class Article extends Model | 
| 43 | 43 | ||
| 44 | public function getFiltered(array $filters): Collection | 44 | public function getFiltered(array $filters): Collection | 
| 45 | { | 45 | { | 
| 46 | - return $this->when(array_key_exists('tag', $filters), function ($q) use ($filters) { | 46 | + return $this->filter($filters, 'tag', 'tags', 'name') | 
| 47 | - $q->whereRelation('tags', 'name', $filters['tag']); | 47 | + ->filter($filters, 'author', 'user', 'username') | 
| 48 | - }) | 48 | + ->filter($filters, 'favorited', 'users', 'username') | 
| 49 | - ->when(array_key_exists('author', $filters), function ($q) use ($filters) { | ||
| 50 | - $q->whereRelation('user', 'username', $filters['author']); | ||
| 51 | - }) | ||
| 52 | - ->when(array_key_exists('favorited', $filters), function ($q) use ($filters) { | ||
| 53 | - $q->whereRelation('users', 'username', $filters['favorited']); | ||
| 54 | - }) | ||
| 55 | ->when(array_key_exists('offset', $filters), function ($q) use ($filters) { | 49 | ->when(array_key_exists('offset', $filters), function ($q) use ($filters) { | 
| 56 | $q->offset($filters['offset'])->limit($filters['limit']); | 50 | $q->offset($filters['offset'])->limit($filters['limit']); | 
| 57 | }) | 51 | }) | 
| ... | @@ -59,6 +53,13 @@ class Article extends Model | ... | @@ -59,6 +53,13 @@ class Article extends Model | 
| 59 | ->get(); | 53 | ->get(); | 
| 60 | } | 54 | } | 
| 61 | 55 | ||
| 56 | + public function scopeFilter($query, array $filters, string $key, string $relation, string $column) | ||
| 57 | + { | ||
| 58 | + return $query->when(array_key_exists($key, $filters), function ($q) use ($filters, $relation, $column, $key) { | ||
| 59 | + $q->whereRelation($relation, $column, $filters[$key]); | ||
| 60 | + }); | ||
| 61 | + } | ||
| 62 | + | ||
| 62 | public function setTitleAttribute(string $title): void | 63 | public function setTitleAttribute(string $title): void | 
| 63 | { | 64 | { | 
| 64 | $this->attributes['title'] = $title; | 65 | $this->attributes['title'] = $title; | ... | ... | 
No preview for this file type
- 
Please register or login to post a comment
