按当前ID列出的另一个表的成本总和

时间:2018-03-08 11:17:24

标签: laravel laravel-5

我有4张桌子:

"汽车"表,每辆车都有一个ID。

"操作"保存操作的表已在汽车上完成。

| ID  | CarID | Operation | User | JournalID |
| --- | ----- | --------- | ---- | --------- |

"交易"记录操作成本和其他日常开支的表,其中每个操作有2个交易,一个是> 0和另一个是< 0(例如:+100和-100):

| ID  | Account | JournalID | Amount | Date |
| --- | ------- | --------- | ------ | ---- |

"中国"记录每日财务的表格:

| ID  | Amount | Date |
| --- | ------ | ---- |

我想要的是知道特定汽车的操作成本amount的总和,我正在循环该汽车的所有操作,然后循环每个日记帐行总和,这导致一个糟糕的结果当然

在这种情况下,我能做些什么来尽快获得结果?

注意:所有列的名称都是较低的情况

2 个答案:

答案 0 :(得分:2)

你需要根据这样的外键加入三个表,并使用一些select和raw查询来解决你的问题。

DB::table('cars')->join('operations','cars.id','operations.car_id')
                 ->join('journal','journal.id','operations.journal_id')
                 ->select(DB::raw('SUM(amount) as total_cost'),'cars.*')
                 ->groupBy('cars.id')
                 ->get();

答案 1 :(得分:1)

我最终用@ Segar的答案进行了解决:

$result = DB::table('cars')
                 ->join('operations','cars.id','operations.car_id')
                 ->join('journal','journal.id','operations.journal')
                 ->join('transactions','transactions.journal','operations.journal')->where('transactions.type', 0)
                 ->select(DB::raw('SUM(amount) as total_cost'),'cars.*')
                 ->groupBy('cars.id')
                 ->get();

print_r($result);

感谢。