Laravel功能:在控制器或模型中?

时间:2017-04-26 10:23:57

标签: laravel laravel-5.4

我想知道什么是更好的解决方案,使用Eloquent Query Builder将所有功能放入我的模型文件中或直接放入控制器。

我有一个表捐款: id,user_id,project_id和amount

表用户: 很多领域,但重要的是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'];

它工作正常,但我不确定如何将其转换为Eloquent Query Builder,我尝试:

 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'];



}

但我只得到自己而不是其他员工的捐款。

对于记录,最好的解决方案是什么?将所有功能放入控制器或模型?

1 个答案:

答案 0 :(得分: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;

希望有所帮助