我想知道什么是更好的解决方案,使用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'];
}
但我只得到自己而不是其他员工的捐款。
对于记录,最好的解决方案是什么?将所有功能放入控制器或模型?
答案 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;
希望有所帮助