首页 > 解决方案 > Doctrine ODM - 浮点字段不适用于十进制字段

问题描述

我有一个学说文档,字段配置设置为

/** @ODM\Field(type="float") */
public $stock_price;

在我的 mongodb 上,该字段具有十进制验证

  stock_price: {
    bsonType: 'decimal',
    description: 'must be a decimal and is required'
  },

当我尝试存储它返回的值document validation failedcannot convert decimal to float

$odm = new stock();
$odm->stock_price = 10.99;
$dm->persist($odm);
$dm->flush();

返回document validation failed

如果我尝试转换为 mongo 十进制,我也插入失败。

$odm = new stock();
$odm->stock_price = new Decimal128("10.99");
$dm->persist($odm);
$dm->flush();

返回cannot convert decimal to float

标签: mongodbphp-7.2doctrine-odmmezzio

解决方案


mongodb-odm 尚不支持小数(2019 年 10 月 12 日)v2.0.1(请参阅支持的类型)。

它是在 mongodb 版本 3.4 中引入的,仅如BSON Types mongoDB 文档中所述,因此需要将其添加到 mongodb-odm。

您可以分叉项目并自己添加类型,也可以提出拉取请求。

我将复制浮点类型,创建一个十进制类型,更改其获取和写入逻辑以处理PHP - MongoDB\BSON\Decimal128,最后更新 Type.php 以包含新的 DecimalType。


推荐阅读