2017-04-26 75 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; 

希望它有助于

相关问题