Laravel 功能:在控制器中还是在模型中?
Laravel Function : In controller or in model?
我想知道什么是更好的解决方案,使用 Eloquent Query Builder 或直接将所有函数放入我的模型文件中或直接放入控制器中。
我收到了 Table 捐款:
ID、user_id、project_id 和金额
A Table 用户:
许多字段,但重要的是 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 查询生成器,我尝试 :
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'];
}
但是我只拿到了自己的捐款,其他员工没有。
记录一下,最好的解决方案是什么?将所有功能放入控制器或模型中?
您可以在模型中使用范围来实现您想要的。例子
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;
希望对您有所帮助
我想知道什么是更好的解决方案,使用 Eloquent Query Builder 或直接将所有函数放入我的模型文件中或直接放入控制器中。
我收到了 Table 捐款: ID、user_id、project_id 和金额
A Table 用户: 许多字段,但重要的是 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 查询生成器,我尝试 :
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'];
}
但是我只拿到了自己的捐款,其他员工没有。
记录一下,最好的解决方案是什么?将所有功能放入控制器或模型中?
您可以在模型中使用范围来实现您想要的。例子
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;
希望对您有所帮助