php - 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'));
}
有谁知道如何更改它,所以我将保存整数,但读取浮点数?
解决方案
我了解您保存为 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);
}
}
?>
如果 price 列中的值为 125,则返回125.00
推荐阅读
- pandas - 使用 groupby 添加标志列顶部/底部 N 值
- flutter - 为什么当我在其小部件中调用 Flutter 有状态小部件时,它没有改变另一个有状态小部件的状态
- java - 如何使用 Maven 插件制作包含资源的可执行 jar
- excel - Excel - 获取最后一场比赛
- python - 在 Python 中使用多处理填充多个列表
- java - 使用 spring-boot 将多维数据集插入 postgres 数据库
- qt - 在 microsoft visual studio 2019 中生成 moc 文件
- vba - 如何根据特定单元格上的值在 Excel 中触发 VBA 宏?
- design-patterns - 使用字符串与枚举作为工厂方法的参数?
- reactjs - Flow Cadence 未能在执行节点上执行脚本:rpc error: code = DeadlineExceeded desc = context deadline exceeded