2016-06-07 7 views
5

Also in meiner Datenbank habe ich eine Tabelle mit dem Namen website_tags, die id, title und so weiter enthält, und ich habe auch eine Tabelle namens websites, mit ähnlicher Konstruktion. Und es gibt auch eine Tabelle mit dem Namen assigned_tags, die die Beziehung zwischen Tags und Websites enthält, also die Relation id, tag_id and website_id enthält.Laravel Abfrage Builder Anzahl von Join

Was ich brauche, ist diese Tabellen mit Abfrage zu verbinden, ich muss alle Tags erhalten und zählen, wie oft diese Tags verwendet werden. So zum Beispiel website_tags enthält folgende Informationen:

1: men 
2: women 

Und zugewiesen Tags enthalten wie id: tag_id: website_id

1: 1: 1 
2: 1: 2 
3: 2: 2 

Also werde ich den Tag 'Männer' get verwendet wird in 2 Websites und Tag ' Frauen wird in 1. verwendet Wie sollte ich die Abfrage erstellen? jetzt Ich habe nämlich:

DB::table('website_tags') 
->join('assigned_tags', 'website_tags.id', '=', 'assigned_tags.tag_id') 
->select('website_tags.id as id', 'website_tags.title as title', DB::raw("count(assigned_tags.tag_id) as count"))- 
>get(); 

Aber das ist falsch, diese Abfrage nur zählt Zeilen in assigned_tags.

Antwort

10

Sie haben groupBy zu definieren, so wird Abfrage wissen, wie es zu zählen (wie in der regulären SQL)

Versuchen Sie so etwas wie dieser

DB::table('website_tags') 
->join('assigned_tags', 'website_tags.id', '=', 'assigned_tags.tag_id') 
->select('website_tags.id as id', 'website_tags.title as title', DB::raw("count(assigned_tags.tag_id) as count")) 
->groupBy('website_tags.id') 
->get(); 
+0

yup, getan, dass vor einer Minute, trotzdem danke:) – Coffee