したがって、私のデータベースには、website_tags
などを含むid, title
というテーブルがあり、同様の構造のwebsites
というテーブルもあります。また、assigned_tags
というテーブルがあり、タグとWebサイト間の関係が含まれているため、関係id, tag_id and website_id
が含まれています。
必要なのは、これらのテーブルをクエリで結合することです。すべてのタグを取得し、これらのタグが使用された回数を数える必要があります。したがって、たとえば、website_tagsには次の情報が含まれています。
1: men
2: women
割り当てられたタグには次のようなIDが含まれます:tag_id:website_id
1: 1: 1
2: 1: 2
3: 2: 2
したがって、タグ「men」が2つのWebサイトで使用され、タグ「women」が1で使用されていることがわかります。クエリを作成するにはどうすればよいですか?今のところ次のようになっています。
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();
しかし、これは間違っています。このクエリは、assigned_tagsの行をカウントするだけです。
groupBy
を定義して、クエリがそれをカウントする方法を認識できるようにする必要があります(通常のSQLと同じように)
このようなものを試してください
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();