Laravel - łączenie tabel oraz grupowanie danych

0

Witam.
Mam pewien problem w laravelu. Na początek struktura tabel.

tabela tags: id,name
tabela tags_ref: id, tag_id, post_id

Jak więc widać mam tabelę "tags" gdzie trzymam listę wszystkich tagów występujących w aplikacji oraz tags_ref gdzie mam zapisywane relacje pomiędzy danym postem a tagami przypisanymi do niego.

Chciałbym w zapytaniu SQL zliczyć powtarzające się tagi (przez co otrzymam liczbę postów dla danego tagu) a także złączyć tabelę "tags" aby wynik zapytania posiadał nazwy tagów.

Mam taki oto kod:

DB::table('tags_ref')
        ->join('tags', 'tags_ref.tag_id', '=', 'tags.id')
        ->select(DB::raw('count(tag_id) as quantity, tag_id'))
        ->groupBy('tag_id')
        ->orderBy('quantity', 'desc')
        ->get();

I prawie działa dobrze, bo jako wynik otrzymuję listę tagów o danych id wraz z ilością wystąpieńm ale zapytanie nie pobiera mi danych z tabeli "tags". Przez co nie mam nazw tagów.

Co jest nie tak w powyższym zapytaniu? Jak można powyższe zapytanie poprawić?

Dziękuję

0

ale zapytanie nie pobiera mi danych z tabeli "tags".

Nigdzie w SELECT nie umieściłeś żadnej wzmianki o tags, dlatego nic z tamtej tabeli nie jest zwracane.

0

Próbowałem dopisać już wcześniej w SELECT różne "wzmianki" odnośnie tabeli tags ale wszystkie kończyły się błędem albo rezultatem jak powyżej. Więc nie wiem jak umieścić właściwą "wzmiankę". Czy możesz napisać mi jak ta wzmianka powinna wyglądać?

0

Dobra mam. Coś mi zaświtało po moim ostatnim wpisie i znalazłem odpowiednią formę zapytania. Wygląda tak:

DB::table('tags_ref')
            ->join('tags', 'tags_ref.tag_id', '=', 'tags.id')
            ->select(DB::raw('count(tag_id) as quantity, tag_id'),DB::raw('tags.name'))
            ->groupBy('tag_id','tags.name')
            ->orderBy('quantity', 'desc')
            ->take(10)
            ->get();

Teraz działa jak należy. Dzięki za natchnienie :).

1 użytkowników online, w tym zalogowanych: 0, gości: 1