【问题标题】:Query with sum of nested relationship based on reference id (laravel vue)基于参考ID的嵌套关系总和查询(laravel vue)
【发布时间】:2021-11-14 02:18:09
【问题描述】:

有模型

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

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

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

如何根据参考customer_id计算报表最新记录的列金额总和?我不知道如何使它工作。

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

我设置了多层次的关系。

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

【问题讨论】:

    标签: laravel vue.js


    【解决方案1】:

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

    在您的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();
    

    【讨论】:

    • 嗨,我尝试了,但它返回空白作为响应..
    • 如果客户与用户相同
    • 对不起,考虑到用户是客户,我回答了这个问题,如果您将答案中提到的关系添加到客户模型中,它将起作用
    • 是的,它是一样的,但它不返回任何东西。它从响应面板返回 html
    • 您确定您的数据库中有足够的记录吗?
    猜你喜欢
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 2020-01-20
    • 2020-04-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-02-26
    相关资源
    最近更新 更多