аксессоры laravel в контроллере?

Я добавил аксессоры и мутаторы в мою модель 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.

Заранее спасибо.

0

Решение

Аксессоры и мутаторы позволяют форматировать атрибуты Eloquent, когда
извлечение их из модели или установка их значения.

… не во время опроса таблицы.

Model::with(['xxx'])
->addSelect(DB::raw('SUM(`table`.amount/100) as sum_of_amounts'))
->where('parent_id', $id)
->get();
0

Другие решения

Метод доступа / мутатор вызывается только тогда, когда вы получаете доступ к свойству из результата, но он не работает в запросе, поэтому вы не можете сделать это, но в качестве альтернативы вы можете использовать Laravel’s Коллекция :: Сумма () метод например:

$collection = Model::with(['xxx'])->where('parent_id', $id)->get();
$someOfAmount = $collection->sum('amount');

Убедитесь, что вы создали защищенный $appends собственность в вашем Model в использовании, где это имеет следующее:

protected $appends = ['amount'];

Примечание: я не уверен, что это $appends требуется, но вы можете попробовать.

0

По вопросам рекламы [email protected]