我的Laravel查询构建器返回null:
$country = DB::table('participate_company')
->join('company', 'company.company_id', '=', 'participate_company.company_id')
->join('country', 'country.country_id', '=', 'company', 'company.country_id')
->join('competition', 'competition.competition_id', '=', 'participate_company.competition_id')
->select('country.country_name', DB::raw('COUNT(company.country_id) as total'))
->groupBy('company.country_id')
->groupBy('country.country_name')
->get();
表设计:
1。参与公司
competition_id(pk / fk)
company_id(pk / fk)
2。公司
company_id(pk)
company_name
country_id(fk)
3。国家
country_id(pk)
country_name
4。竞争
competition_id(pk)
Competition_year
我想根据比赛年份产生不同国家的结果。例如竞赛年度= 2012,国家名称=英格兰,计数(总计)=20。但是我当前的查询产生空值。
SQLFiddle:http://sqlfiddle.com/#!9/a2092f/1
答案 0 :(得分:1)
我建议使用Laravel ORM Relationship和Eager Loading解决此问题。
在公司模型中,我们将定义country()
方法:
public function country() {
return $this->belongsTo(Country::class, 'country_id', 'id');
}
在竞赛模型中,定义方法
public function company() {
return $this->belongsToMany(Company::class);
}
因此,在控制器中,您可以调用groupBy
:
Competition::with('company:id,country_id')->get()->groupBy('year');
我们将在country_id
的{{1}}中的每个company
中捕获relations
。
我只是测试了一个简单的示例,之后,我们将遍历此集合并对其进行计数。
希望这很有用。
P / s。在按模型使用时,表的名称为:years
,companies
,countries
,competitions