@BarneyGumble

Как в Laravel в контроллере вытащить записи по тегу из PIVOT таблицы?

Ковыряю вот этот пакет тегов для Laravel - https://github.com/spatie/laravel-tags

Никак не понимаю как в контроллере вытащить записи с определённым тегом. Сложности именно в составлении Eloquent запроса

Есть три таблицы:
- Posts
- Tags
- Taggable (PIVOT таблица связывающая айдишники тегов и айдишники записей)

5f932e5c83bce092973029.jpeg

$posts = Post::get();
так вытаскиваются все записи

$posts = Post::select(
            'posts.*'
        )
            ->join('taggables', 'posts.id', '=', 'taggables.taggable_id')
            ->get();

пробовал так, но не работает :(
  • Вопрос задан
  • 87 просмотров
Решения вопроса 1
@jazzus
Таблица taggables используется для полиморфной связи, чтобы добавлять теги к любым моделям. В данный модуль не вникал. Но судя по первой строчке из описания нужно добавить трейт HasTags в модель Post. В трейте уже будут все отношения с методами без прописывания связей и т.д.

Получить все посты с тегами можно так
Post::withAnyTags(['first tag', 'second tag'])->get();

хотя название метода плохое и может путать т.к. with в Laravel имеет другую функцию чем whereHas. Лучше было бы hasAnyTags

пс перед добавлением модулей не будет лишним почитать зачем нужен фреймворк, отношения и почему уже можно не использовать join.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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