Laravel Eloquent: Должен ли я добавлять значения из модели или контроллера?

У меня есть модель с 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.

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Поиск нового уровня в Laravel с помощью MeiliSearch и Scout
Laravel Scout - это популярный пакет, который предоставляет простой и удобный способ добавить полнотекстовый поиск в ваше приложение Laravel. Он...
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
1
0
1 027
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ прост.

Сохраните их в своей модели, потому что, если вы сделаете это правильно:

  • Затем вы можете использовать их в своих запросах Eloquent.
  • Вы можете использовать $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') в вашем контроллере.

Другие вопросы по теме