@San4aus
FullStack developer

Как правильно реализовать фильтр тегов по определённому условию?

Здравствуйте, есть фильтр тегов, реализованный на Laravel, со своей задачей он справляется, фильтрует теги и выводит, только те статьи, у которых есть полное совпадение по тегам.

$post->isPublish()
            ->with('tags')
            ->when(!empty($tags), function ($query) use ($tags) {
                $query->whereHas('tags', function($q) use($tags) {
                    $q->whereIn('id', explode(',', $tags))
                        ->groupBy('posts.id')
                        ->havingRaw('COUNT(posts.id) = ?', [count(explode(',', $tags))]);
                });
            })
            ->orderBy('id', 'DESC')
            ->paginate(8);


select * from `posts` where `status` = 1 
and exists (select * from `tags` inner join `post_tag` on `tags`.`id` = `post_tag`.`tag_id` where `posts`.`id` = `post_tag`.`post_id` and `id` in ('7', '1', '9') 
group by `posts`.`id` 
having COUNT(posts.id) = 3) 
limit 8 
offset 0


Заказчик захотел его "прокачать". Цитирую:

ЕСЛИ человек выбрал несколько фильтров – отображаются сначала статьи, соответствующие всем фильтрам, затем для каждого из фильтров отдельно. ЕСЛИ нет статей, отвечающих ВСЕМ выбранным фильтрам – отображаются статьи, соответствующие хотя бы одному фильтру.


Ломал голову, но так и не понял, реально ли такое сделать. если да, то как?
  • Вопрос задан
  • 129 просмотров
Пригласить эксперта
Ответы на вопрос 1
dlnsk
@dlnsk
ПК Партнер 01.01 -> ПК Поиск -> IBM PC
Мне кажется, что вам нужно посчитать кол-во тегов у интересующих вас статей и вывести статьи в порядке убывания этого числа.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы