Я добавил аксессоры и мутаторы в мою модель Laravel.
public function getAmountAttribute($amount)
{
return ($amount) / 100;
}
public function setAmountAttribute($amount)
{
$this->attributes['amount'] = $amount * 100;
}
Они работают нормально для меня. В одном месте я сталкиваюсь с проблемой:
Проблема в том, что я хочу применить агрегатную функцию в моем контроллере для поля количества. Но аксессоры не работают.
Model::with(['xxx'])->where('parent_id', $id)->sum('amount')
Значение $ id в порядке, я проверил. Это дает мне поле суммы суммы, где parent_id равен $ id. Это должно дать результаты после погружения на 100.
Заранее спасибо.
Аксессоры и мутаторы позволяют форматировать атрибуты Eloquent, когда
извлечение их из модели или установка их значения.
… не во время опроса таблицы.
Model::with(['xxx'])
->addSelect(DB::raw('SUM(`table`.amount/100) as sum_of_amounts'))
->where('parent_id', $id)
->get();
Метод доступа / мутатор вызывается только тогда, когда вы получаете доступ к свойству из результата, но он не работает в запросе, поэтому вы не можете сделать это, но в качестве альтернативы вы можете использовать Laravel’s Коллекция :: Сумма () метод например:
$collection = Model::with(['xxx'])->where('parent_id', $id)->get();
$someOfAmount = $collection->sum('amount');
Убедитесь, что вы создали защищенный $appends
собственность в вашем Model
в использовании, где это имеет следующее:
protected $appends = ['amount'];
Примечание: я не уверен, что это $appends
требуется, но вы можете попробовать.