Alexey Mezenin

Used local scope

...@@ -43,20 +43,21 @@ class Article extends Model ...@@ -43,20 +43,21 @@ 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) { 49 + ->when(array_key_exists('offset', $filters), function ($q) use ($filters) {
50 - $q->whereRelation('user', 'username', $filters['author']); 50 + $q->offset($filters['offset'])->limit($filters['limit']);
51 - }) 51 + })
52 - ->when(array_key_exists('favorited', $filters), function ($q) use ($filters) { 52 + ->with('user', 'users', 'tags', 'user.followers')
53 - $q->whereRelation('users', 'username', $filters['favorited']); 53 + ->get();
54 - }) 54 + }
55 - ->when(array_key_exists('offset', $filters), function ($q) use ($filters) { 55 +
56 - $q->offset($filters['offset'])->limit($filters['limit']); 56 + public function scopeFilter($query, array $filters, string $key, string $relation, string $column)
57 - }) 57 + {
58 - ->with('user', 'users', 'tags', 'user.followers') 58 + return $query->when(array_key_exists($key, $filters), function ($q) use ($filters, $relation, $column, $key) {
59 - ->get(); 59 + $q->whereRelation($relation, $column, $filters[$key]);
60 + });
60 } 61 }
61 62
62 public function setTitleAttribute(string $title): void 63 public function setTitleAttribute(string $title): void
......
No preview for this file type