首页 文章

Laravel通过关系和计算返回集合

提问于
浏览
0

我有一个laravel应用程序,它有一个模型客户端 .

客户端有许多地址,许多作业和许多事务 .

我在客户端模型上有以下关系:

public function jobs()
    {
        return $this->hasMany('App\Job','client_id');
    }

public function addresses()
    {
        return $this->hasMany('App\Address','client_id');
    }

public function Fees()
    {
        return $this->hasMany('App\Transaction','client_id');
    }

然后我在该模型上有另一个函数来计算该值

public function balance() 
    {
        return $this->Fees()->where('status',2)->sum('gross');
    }

我正在尝试返回所有客户的列表以及他们的地址,工作和每个客户的余额 .

我尝试过以下方法:

$customers = $user->clients()->with('balance')->with('jobs')->with('addresses')->get();

我收到以下错误

在字符串上调用成员函数addEagerConstraints()

毫无疑问,这将是eagerloading和balance()不是一个集合的事实,但我想知道如何在不必循环构建数组的情况下实现相同的结果 .

1 回答

  • 0

    您可以使用以下函数中的条件

    $customers = $user->clients()
                      ->with(['jobs', 'addresses'])
                      ->with(['Fees'=> function($query){
                           $query->selectRaw('sum(fees_table_name.gross) as gross')
                                 ->where('status',2);
    
                       }])
                       ->get();
    

相关问题