Laravel Nova: изменять значение (многократно) перед сохранением в базе данных

#php #laravel #laravel-nova

#php #ларавель #laravel-нова

Вопрос:

Я использую Laravel Nova для администрирования своего проекта. Однако я сохраняю определенные значения в своей базе данных, такие как проценты или цены, как x*100 . Почему я это делаю? Потому что при сохранении чисел *100 я могу сохранять их как int вместо double или float .

Однако это приводит к проблеме, заключающейся в том, что я вижу число, которое сохраняется и умножается на 100 в базе данных на моей панели администрирования Laravel Nova. Я имею в виду, что я могу обойти это, используя resolveUsing или displayUsing (читайте здесь). Тогда, например 1530 , будет представлено, как 15,30 при погружении, 100 что является правильным.

Единственная проблема с этим заключается в том, что при вводе 100 в поле процент, например, оно также сохраняется как 100, а не как 10000 (100 * 100). Кто-нибудь знает, как я могу это реализовать?

Я также пытался использовать красноречивых наблюдателей. Но это не работает, потому что я попадаю в бесконечный цикл.

С наилучшими пожеланиями и спасибо вам!

Ответ №1:

Используйте средство доступа к модели и мутатор. https://laravel.com/docs/master/eloquent-mutators#defining-a-mutator

Если вы будете использовать mutator и accesor, вам следует удалить resolveUsing и displayUsing в объявлении полей ресурсов.

 public function setAmountAttribute($value)
{
    $this->attributes['amount'] = $value * 100;
}

public function getAmountAttribute($value)
{
    return $value / 100;
}