2016-06-07 24 views
5

Quindi nel mio database ho una tabella chiamata website_tags, che contiene id, title e così via, e ho anche una tabella chiamata websites, con una struttura simile. E c'è anche una tabella chiamata assigned_tags, che contiene la relazione tra tag e siti Web, quindi contiene la relazione id, tag_id and website_id.Laravel Query Builder conta dall'unione

Quello che mi serve è unire queste tabelle con la query, ho bisogno di ottenere tutti i tag e contare quante volte questi tag vengono utilizzati. Così, per esempio website_tags contiene le seguenti informazioni:

1: men 
2: women 

E tag assegnati contiene come id: tag_id: website_id

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

Così mi metterò quel tag 'uomini' è usato in 2 siti web e tag ' donne 'è usato in 1. Come dovrei costruire la query? Per ora ho:

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(); 

Ma questo è sbagliato, questa query solo conta righe in assigned_tags.

risposta

10

è necessario definire groupBy così query saper contare che (proprio come nel SQL regolare)

provare qualcosa di simile

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, fatto che un minuto fa, grazie comunque:) – Coffee

Problemi correlati