deadloop
@deadloop
Активно осваиваю PHP

Как доработаь пагинацию, что-бы вывести список по определенному критерию?

Мне нужно вывести сотрудникок по определенному кретерию, который задан в параметре запроса.
api/employes?page=2&limit=40&tags=3,4
Я вывожу пользователей, в колисетке 40 штук на 2-ой странице у которых тэги 3 и 4.
Я разобрался как выводить страницу и лимит, а как вывести по определенному тэгу, не могу разобратся.

Контроллер:
public function index(Request $request)
    {
        $limit = $request->get('limit');
        $user = Employe::with('tags')->paginate($limit);
        return $user;
    }


Моддель:
public function tags()
    {
        return $this->belongsToMany(Tag::class, 'employe_tag', 'tag_id', 'employe_id');
    }
  • Вопрос задан
  • 70 просмотров
Решения вопроса 1
deadloop
@deadloop Автор вопроса
Активно осваиваю PHP
Вот нашел как можно реализовать

public function index(Request $request)
    {
        $limit = $request->get('limit');
        $tags = $request->get('tags');
        $array_tag = explode(",", $tags);

        $employes = Employe::query()
            ->when($array_tag, function($q) use ($array_tag){
                $q->whereHas('tags', function($q) use ($array_tag) {
                    $q->whereIn('tag_id', $array_tag);
         });

    })->paginate($limit);

        return $employes;
    }
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
t1gor
@t1gor
Web developer
Я бы делал через filter:

  • Добавить в проект https://github.com/Tucker-Eric/EloquentFilter
  • Выполнить php artisan model:filter App\\Employe
  • В созданном фильтре добавить нужные методы для фильтрации по relation-у (он это умеет, смотрите документацию)
  • В контроллере поправить


public function index(Request $request) {
     return Employe::with('tags')
          ->filter($request::all())
          ->paginateFilter($request->get('limit'));
}
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы