Мне нужно сохранить одно поле моей сущности как целое число в базе данных, но в приложении оно должно отображаться как плавающее.
На данный момент я пробовал использовать такие методы, как beforeSave, beforeMarshal и т. д. В базе данных поле помечено как целое число (11). В сущности я положил
* @property float $price
Но все же моя сущность видит это поле как целое число ...
В следующем коде (я поместил его в класс Table) есть только одно место, где функция var_dump возвращает float - это из-за преобразования в этот тип. В любом другом месте это целое число.
public function beforeSave(Event $event, EntityInterface $entity, \ArrayObject $options) {
var_dump($entity->get('price'));
die();
$entity->set('price', $entity->get('price') * 100);
return true;
}
public function beforeMarshal(Event $event, \ArrayObject $data, \ArrayObject $options)
{
$data['price'] = (float) $data['price'];
var_dump($data);
}
public function beforeRules(Event $event, EntityInterface $entity, \ArrayObject $options, $operation)
{
var_dump($entity->get('price'));
}
public function afterRules(Event $event, EntityInterface $entity, \ArrayObject $options, $result, $operation)
{
var_dump($entity->get('price'));
}
Кто-нибудь знает, как это изменить, поэтому я буду сохранять целые числа, но чтение с плавающей запятой?






Я понимаю, что вы сохраняете как INT, но хотите читать как FLOAT.
На мой взгляд, есть два решения. Представьте, что у нас есть таблица / объект Products.
Либо вы используете числовой помощник в своих шаблонах:
<?php echo $this->Number->precision($product->price, 2); ?>
Или вы создаете геттер в своей сущности:
<?php
namespace App\Model\Entity;
use Cake\ORM\Entity;
class Product extends Entity
{
protected function _getPrice($price)
{
return sprintf("%.2f", $price);
}
}
?>
Если значение в столбце цена 125, вернется 125.00.
Это не то, чего я хочу достичь. Мне нужно сохранить INT типа «12345» и прочитать его как «123.45». Просто чтобы потерять десятичную точку.