laravel查询生成器中的错误

6mw9ycah  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(430)

my laravel查询生成器返回空值:

$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. 参与公司

比赛id(pk/fk)
公司id(pk/fk)

2. 公司

公司id(pk)
公司名称
国家/地区id(fk)

3. 国家

国家/地区id(pk)
国家/地区名称

4. 竞争

竞争id(pk)
竞赛年
我想根据比赛年份得出不同国家的比赛结果。例如,竞赛年份=2012,国家名称=英格兰,计数(总数)=20。但是我当前的查询产生null。
sqlfiddle:http://sqlfiddle.com/#!9/a2092f/1号

b4qexyjb

b4qexyjb1#

我建议使用laravelorm关系和渴望加载来解决这个问题。在公司模式中,我们将定义 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 在每个 company 哪个在 relationsyears . 我刚刚测试了一个简单的例子,在那之后,我们将循环这个集合并计算它们。

希望这有用。
p/s。按模型使用时,我的表的名称: companies , countries , competitions , company_competition

相关问题