首页 > 解决方案 > 试图获取非对象的属性“总计”(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;
        });
    }

标签: laravel

解决方案


用户模型

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);
}

推荐阅读