php - CakePHP 3 - 将实体字段 FLOAT 保存为 INTEGER

标签 php mysql database cakephp-3.0

我需要将实体的一个字段保存为数据库中的整数,但在应用程序中它应该被视为浮点型。

目前,我尝试使用 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'));
}

有谁知道如何更改它,所以我将保存整数,但读取 float ?

最佳答案

我知道您保存为 INT 但想读取为 FLOAT。

我认为有两种解决方案。假设我们有一个产品表/实体。

您可以在模板中使用数字助手:

<?php echo $this->Number->precision($product->price, 2); ?>

或者您在实体中创建一个 setter/getter :

<?php
namespace App\Model\Entity;

use Cake\ORM\Entity;

class Product extends Entity
{
    protected function _getPrice($price)
    {
        return sprintf("%.2f", $price);
    }
}
?>

如果价格列中的值为125,则返回125.00

关于php - CakePHP 3 - 将实体字段 FLOAT 保存为 INTEGER,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50200359/

相关文章:

c# - mongo C# 通过id删除多条记录

php - 将 php 项目从 fedora 移动到 windows wamp 错误

mysql - 使用 HAVING 子句、COUNT 聚合和 GROUP BY 与 Sequelize 同时过滤数据

具有可变属性的多种产品类型的数据库设计

mysql - 如何在 IN() 函数内部使用 group_concat ?

mysql - 计算值并自动插入列

html - 将TinyMCE表单数据存储在MySQL数据库中并按原样返回

javascript - 下拉列表更改时的 HTML 提交表单

当为 $bgd_color 传递 -1 时,php gd imagerotate 失败

php - MySQL 查询中的不可见字符