Laravel查询生成器中的错误

时间:2018-07-09 10:07:26

标签: php mysql laravel-5 laravel-query-builder

我的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

1 个答案:

答案 0 :(得分:1)

我建议使用Laravel ORM RelationshipEager 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。 我只是测试了一个简单的示例,之后,我们将遍历此集合并对其进行计数。

Simple example

希望这很有用。

P / s。在按模型使用时,表的名称为:yearscompaniescountriescompetitions