Laravel Eloquent Group按关系总和()

时间:2018-05-17 20:56:00

标签: php mysql laravel eloquent

我有3个模特

  • 交易
  • 工作
  • 服务

我的关系如下:

交易模型:

public function job() {
   return $this->belongsTo('App\Job');
}

工作模式:

public function service() {
   return $this->belongsTo('App\Service');
}

我正在尝试查询我的交易表并总计总价值和按服务分组。

我最初的想法是查询交易:

Transaction::with('job')->groupBy('job.service_id'); 

这不起作用,因为job.service_id在transaction表中不存在。

我的另一个想法是在Transaction查询上做一个回调,并对jobs表中的每个service_id进行查询 - 这看起来好像可以工作,但这似乎是一个漫长的过程。

我的目标输出:

  • service_id:1
  • total_value:100

  • service_id:2

  • total_value:300

然后我会在服务表中查询服务名称。

1 个答案:

答案 0 :(得分:-1)

尝试此查询:

Transaction::join('jobs', 'jobs.id', 'transactions.job_id')
    ->join('services', 'services.id', 'jobs.service_id')
    ->select('services.id', \DB::raw('sum(transaction.value)')
    ->groupBy('services.id')
    ->get();