Laravel Eloquent:我应该附加来自模型或控制器的值吗?

时间:2019-02-22 11:03:09

标签: laravel model-view-controller eloquent model append

我有一个带有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”?

实际的代码比此示例复杂,并且花费大量时间思考如何将每个值附加到复杂的口才with查询内部。

2 个答案:

答案 0 :(得分:1)

答案很简单。

将它们保留在模型中,因为如果操作正确:

  • 然后您可以在口才查询中使用它们
  • 您可以使用$model->costUnder
  • 如果您了解我的意思,
  • 控制器更像是“资源管理器”,而不是“模型描述符”。

答案 1 :(得分:1)

使添加cost_overcost_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')的方式附加属性。