Laravel 来自加入的查询生成器计数
Laravel Query Builder count from join
所以在我的数据库中我有 table 称为 website_tags
,其中包含 id, title
等等,我还有 table 称为 websites
,具有类似的结构。还有一个叫做assigned_tags
的table,它包含标签和网站之间的关系,所以它包含关系id, tag_id and website_id
。
我需要的是将这些tables 与查询连接起来,我需要获取所有标签并计算这些标签被使用了多少次。因此,例如 website_tags 包含以下信息:
1: men
2: women
并且分配的标签包含类似 id:tag_id:website_id
1: 1: 1
2: 1: 2
3: 2: 2
所以我会得到标签 'men' 在 2 个网站中使用,标签 '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();
所以在我的数据库中我有 table 称为 website_tags
,其中包含 id, title
等等,我还有 table 称为 websites
,具有类似的结构。还有一个叫做assigned_tags
的table,它包含标签和网站之间的关系,所以它包含关系id, tag_id and website_id
。
我需要的是将这些tables 与查询连接起来,我需要获取所有标签并计算这些标签被使用了多少次。因此,例如 website_tags 包含以下信息:
1: men
2: women
并且分配的标签包含类似 id:tag_id:website_id
1: 1: 1
2: 1: 2
3: 2: 2
所以我会得到标签 'men' 在 2 个网站中使用,标签 '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();