laravel - 试图获取非对象的属性“总计”(laravel 和 vue)
问题描述
当项目之一不包含在一个用户下的任何报告时,我面临总返回错误尝试获取非对象的属性“总计”的问题。如何解决这个问题?任何帮助将不胜感激。感谢
User
id | name | code | ....
Project(One user can have many projects,One project can have many report)
id | user_id | name | code | ....
Report (One project can have many report.the report is update each month)
id | project_id | amount | date | ....
/project model <br/>
public function latesReport(){
return $this->report()->latest('id');
}
/User model <br/>
public function total(){
return $this->project()->get()->sum(function ($projects) {
return $projects->latestReport()->total;
});
}
解决方案
用户模型
public function projects() {
return $this->hasMany(Project::class);
}
项目模型
public function user() {
return $this->belongsTo(User::class);
}
public function reports() {
return $this->hasMany(Report::class);
}
public function latestreport() {
return $this->hasOne(Report::class)->latest();
}
报告模型
public function project() {
return $this->belongsTo(Project::class);
}
这建立了 Eloquent 关系。因此,在 User 模型中,获取您将使用的该用户所有项目的最新报告的总数:
public function total() {
$aggregate = 0;
$projects = $this->projects;
foreach($projects as $project) {
if($project->latestreport != null) {
$aggregate += $project->latestreport->total;
}
}
return($aggregate);
}