У меня есть модель «Продукт», которую я хотел бы изменить или «мутировать» один из его атрибутов, но только в определенных случаях.Yii2 Поведение/сценарии Изменение атрибута
Я хранил атрибут, Цена как целое число. Таким образом, 1,99 доллара хранится как 199.
Я хотел бы включить это с activeForm таким образом, чтобы при получении цены он конвертировался в «1.99» в поле (визуально). Но когда я отправляю форму, перед ее проверкой она изменяет цену от «1.99» до «199».
Я предполагаю, что для этого потребуется поведение Behaviors и, в частности, привязка поведения к модели перед созданием активной формы. Тем не менее, я все еще путаюсь, как это сделать. Я вижу, что есть класс AttributeBehavior, или я могу создать свой собственный класс Behavior, но у меня возникли проблемы с выяснением реализации в этом случае.
Ситуация:
foreach ($store_item->storeProducts as $i=>$product) {
?>
<tr>
<td>
<?= $form->field($product, '['.$i.']price')->label(false); ?>
</td>
</tr>
<?php
$i++;
}
?>
Вы можете использовать модельное событие ** beforeValidate() ** для хранения $ 1.99 как 199, и при получении результатов вы можете использовать ** afterFind() ** для получения от 199 до 1.99 –
Есть ли конкретная причина, по которой база данных Поле имеет тип 'int' вместо' decimal'? – topher
Вы можете просто использовать getter/setter – soju