Laravel Eloquent:我应该从模型或控制器中追加值吗?

问题描述 投票:0回答:2

我有一个模型与idnamecost

protected $table = 'has_costs';
protected $fillable = [
    'id','name','cost'
];

然后我还使用append添加新的列,cost_undercost_over,它基本上可以从成本中进行简单的计算。

protected $appends = ['cost_over','cost_under'];

我应该在模型中进行如下计算:

public function getCostOverAttribute()
{
    $costOver = (20/100)*cost;
    return $this->attributes['over'] = $costOver;
}

public function getCostUnderAttribute()
{
    $costUnder = (80/100)*cost;
    return $this->attributes['under'] = $costUndr;
}

或者我是否仍应在控制器中执行此操作以使其更加“MVC”?

实际代码比这个例子更复杂,并且需要花费大量时间考虑如何在复杂的Eloquent with查询中深入附加每个值。

laravel model-view-controller eloquent model append
2个回答
1
投票

cost_overand cost_under添加为模型属性更有意义。

public function getCostOverAttribute()
{
    return 20 / 100 * $this->cost;
}

public function getCostUnderAttribute()
{
    return 80 / 100 * $this->cost;
}

你可以访问它们$model->cost_over$model->cost_under

保持控制器清洁内部模型对其数据的计算。

此外,如果您不想在每次实例化模型时附加这些属性,则可以在控制器中将$model->append('cost_over')作为路径追加属性。


1
投票

答案很简单。

将它们保留在模型中,因为如果你做得对:

  • 然后,您可以在Eloquent查询中使用它们
  • 你可以使用$model->costUnder
  • 如果你知道我的意思,控制器更像是“资源管理器”而不是“模型描述符”。
© www.soinside.com 2019 - 2024. All rights reserved.