Doctrine ODM - 浮点字段不适用于小数字段

Doctrine ODM - float field not working with decimal field

我有一份教义文档,字段配置设置为

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

在我的 mongodb 上,该字段具有小数验证

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

当我尝试存储值时 return document validation failedcannot convert decimal to float

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

return document validation failed

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

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

return cannot convert decimal to float

mongodb-odm 尚不支持十进制(2019 年 10 月 12 日)v2.0.1(参见 Supported Types)。

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

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

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

感谢@filipe 的解释,但我找到的解决方案是将验证更改为 double,一切正常。