2017-04-26 79 views
0

我想知道最好的解決方案是什麼,把所有的功能放在我的模型文件中使用Eloquent Query Builder或直接放入控制器中。Laravel功能:在控制器還是在模型中?

我有一個表與捐贈: ID,USER_ID,PROJECT_ID和金額

表用戶: 許多領域,但一個重要的company_id

因此,每個員工都有一個公司。但是每個員工都可以爲幾個項目做幾筆捐款。

例如,我已將此函數放入我的CompaniesController中,以顯示所選公司的員工所做的所有捐贈。 :

// Total sum of all donates of the employees 
    $total_sum = Donation 
     ::join('users', 'donations.user_id', '=', 'users.id') 
     ->where('users.company_id', $id) 
     ->selectRaw('sum(donations.amount) as sum') 
     ->first() 
     ->toArray()['sum']; 

它工作正常,但我不知道如何將它轉換成一個雄辯的查詢生成器,我嘗試:

public function total_sum($company_id) 
{ 
    return $this->hasMany('App\Donation') 
     ->join('users', 'donations.user_id', '=', 'users.id') 
     ->where('users.company_id', $company_id) 
     ->selectRaw('sum(donations.amount) as sum') 
     ->first() 
     ->toArray()['sum']; 



} 

但我只得到所作出的捐贈自己,而不是其他員工。

而對於記錄,最好的解決方案是什麼?把所有的功能放到控制器或模型中?

+0

您可以使用存儲庫模式。這裏有一篇不錯的文章https://bosnadev.com/2015/03/07/using-repository-pattern-in-laravel-5/ –

回答

0

您可以在模型中使用示波器來實現您想要的功能。實施例

public function scopeTotalSum($query, $id) 
{ 
    return $query->join('users', 'donations.user_id', '=', 'users.id') 
     ->where('users.company_id', $id) 
     ->selectRaw('sum(donations.amount) as sum'); 
} 

然後在你控制器,你可以使用這樣

$total_sum = Donation::totalSum($id)->first()->toArray()['sum']; 

我想你可以改變上述行此;

$total_sum = Donation::totalSum($id)->first()->sum; 

希望它有助於

相關問題