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

时间:2017-09-29 20:13:22

标签: php laravel laravel-5 eloquent

我有一个laravel应用程序,它有一个模型Client。

客户有很多地址,很多工作和很多交易。

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

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 :(得分:0)

您可以在条件中使用条件,如下所示

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

                   }])
                   ->get();