У меня есть модель с id, name и cost.
protected $table = 'has_costs';
protected $fillable = [
'id','name','cost'
];
Затем я также использовал append для добавления новых столбцов, cost_under и cost_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.






Ответ прост.
Сохраните их в своей модели, потому что, если вы сделаете это правильно:
$model->costUnderИмеет смысл добавить cost_over и 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') в вашем контроллере.