Doctrine ODM - плавающее поле не работает с десятичным полем - PullRequest
2 голосов
/ 11 октября 2019

У меня есть документ в доктрине с полем config, установленным на

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

, и на моем mongodb поле имеет проверку для десятичного числа

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

Когда я пытаюсь сохранитьвозвращаемые значения document validation failed или cannot convert decimal to float

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

return document validation failed

Если я попытаюсь преобразовать в десятичную монго, мне тоже не удалось вставить.

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

возврат cannot convert decimal to float

Ответы [ 2 ]

3 голосов
/ 12 октября 2019

Десятичное число еще не поддерживается для mongodb-odm (12 октября 2019 г.) v2.0.1 (см. Поддерживаемые типы ).

Оно было введено в версии 3.4 mongodb, как указано в Типы BSON Документы mongoDB, поэтому их необходимо добавить в mongodb-odm.

Вы можете разветвить проект и добавить тип самостоятельно, а также сделать запрос на извлечение.

Я бы скопировал тип с плавающей запятой, создал десятичный тип, изменил его выборку и записал логику для обработки PHP - MongoDB \ BSON \ Decimal128 и, наконец, обновил бы Type.php, добавив новый DecimalType.

0 голосов
/ 14 октября 2019

Спасибо @filipe за ваше объяснение, но решением, которое я нашел для меня, было изменение проверки на double, и все работает нормально.

...