基于引用id(laravel-vue)的嵌套关系总和查询



使用型号

客户
id | name | code | ....

项目(一个客户可以有多个项目,一个项目可以有多份报告)
id | customer_id | name | code | ....

报告(一个项目可以有多个报告。报告每月更新)
id | project_id | amount | year | month | ....

如何根据引用customer_id计算报表的最新记录的列数之和?我不知道该怎么做。

任何帮助都将不胜感激。我想根据客户id显示每个项目的最新报告(基于报告id的最新报表)中的金额总和。

我有许多粗略的关系。

public function report()
{
return $this->hasManyThrough(
Report::class,
Project::class,
'customer_id', 
'project_id', 
'id',
'id' 
);
}

添加以下内容将解决您的问题:

User.php文件中:

public function reports()
{
return $this->hasManyThrough(
Report::class,
Project::class,
'user_id', 
'project_id', 
'id',
'id' 
);
}
public function projects(){
return $this->hasMany(Project::class);
}
public function amount(){
return $this->projects()->get()->sum(function ($project) {
return $project->latestReport()->amount;
});
}

Project.php文件中:

public function reports(){
return $this->hasMany(Report::class);
}
public function latestReport(){
return $this->reports()->latest()->first();
}

最后。您可以通过调用来获得每个项目的最新报告的金额总和

User::first()->amount();

最新更新