CakePHP 3 - Сохранение поля объекта FLOAT как INTEGER

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

На данный момент я пробовал использовать такие методы, как 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'));
}

Кто-нибудь знает, как это изменить, поэтому я буду сохранять целые числа, но чтение с плавающей запятой?

Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
0
391
1

Ответы 1

Я понимаю, что вы сохраняете как 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». Просто чтобы потерять десятичную точку.

Lurker 07.05.2018 20:19

Другие вопросы по теме