正确的doc typehint for doctrine column type" decimal"

时间:2018-03-26 13:57:57

标签: php doctrine-orm

我在我的一个实体中使用此列:

/**
 * @var float
 * @ORM\Column(type="decimal", precision=20, scale=2)
 */
public $value;

根据Doctrine docsdecimal类型作为string返回给PHP,但我将其用作float。我应该使用@var float对其进行键入,还是@var string正确?

无论如何,如果我将此变量用于算术计算,例如。

$object->value + $otherobject->value

我冒得不受欢迎的行为(比如只添加整数部分)?

2 个答案:

答案 0 :(得分:0)

我会这样做:

/**
 * @var float
 *
 * @ORM\Column(type="float", precision=20, scale=2)
 */
public $value;

答案 1 :(得分:0)

使用Symfony 4提供的命令行工具生成实体,可以像这样生成decimal类型的字段:

New property name (press <return> to stop adding fields):
> percent

Field type (enter ? to see all types) [string]:
> decimal

Precision (total number of digits stored: 100.00 would be 5) [10]:
> 5

Scale (number of decimals to store: 100.00 would be 2) [0]:
> 4

这导致以下属性和getter / setter方法:

<?php

// ...

/**
 * @ORM\Column(type="decimal", precision=5, scale=4)
 */
private $percent;

public function getPercent()
{
    return $this->percent;
}

public function setPercent($percent): self
{
    $this->percent = $percent;

    return $this;
}

因此,默认情况下,Doctrine不生成类型提示而生成getter / setter方法。
getter将返回string,而setter则需要一个double类型的参数(它只是float的同义词)。
因此,您无法执行以下操作:

/**
 * @var float
 */
private $value;

由于该值将以字符串形式返回,因此您不应该像问题中那样进行计算,但要注意以前的转换。

编辑:
使用stringfloat进行类型提示的另一种方法是外部库PHP decimal

您可以使用以下命令install

composer require php-decimal/php-decimal