2017-09-29 36 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 –