2017-09-29 39 views
0

我有一个模型客户端的laravel应用程序。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()这无疑将是预先加载和事实的平衡()不是一个集合,但我想知道我将如何实现相同的结果,而不必循环建立一个数组。

回答

0

可以在如下

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

        }]) 
        ->get(); 
+0

感谢,我已经试过,但它返回的所有费用,而不是该和值使用条件与功能? –

+0

新的更新应该是有效的。它基于这个链接。 https://laracasts.com/discuss/channels/eloquent/how-to-use-sumcolumn-from-relation-in-where-clause-and-orderby-it –