【问题标题】:Doctrine ODM - float field not working with decimal fieldDoctrine ODM - 浮点字段不适用于十进制字段
【发布时间】:2019-10-11 18:15:53
【问题描述】:

我有一个文档,其中字段配置设置为

/** @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

【问题讨论】:

    标签: mongodb php-7.2 doctrine-odm mezzio


    【解决方案1】:

    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。

    【讨论】:

    • FWIW 我已经打开了一个问题 (github.com/doctrine/mongodb-odm/issues/2086) 来跟踪此功能请求。我们很乐意接受 PR!
    • 他们在 3 天前向 master 提交了 decimal128。如果您喜欢冒险,可以使用带有 composer require doctrine/mongodb-odm:dev-master 的主分支进行测试。此功能的实际版本将是 2.1,这很可能还需要几个月的时间。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2020-02-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-05
      • 2017-08-06
      • 2016-03-07
      相关资源
      最近更新 更多