Параметр scale атрибута Column
Параметр scale атрибута Column
указывает, сколько знаков после запятой
будет храниться в десятичном поле базы данных.
Он работает в паре с параметром precision,
который задаёт общее количество цифр в числе.
Чем больше scale, тем точнее значение
дробной части. Параметр актуален для типов
decimal и float.
Синтаксис
#[Column(type: 'decimal', precision: precision, scale: scale)]
Пример
Давайте создадим сущность Product
с полем price типа decimal
и точностью два знака после запятой:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORMEntity]
class Product
{
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn(type: 'integer')]
private ?int $id = null;
#[ORMColumn(type: 'decimal', precision: 10, scale: 2)]
private ?string $price = null;
public function getId(): ?int
{
return $this->id;
}
public function getPrice(): ?string
{
return $this->price;
}
public function setPrice(string $price): self
{
$this->price = $price;
return $this;
}
}
?>
В базе данных колонка price будет иметь
тип DECIMAL(10,2). Это значит, что всего
в числе может быть 10 цифр, из которых 2 -
после запятой.
Пример
Давайте сохраним товар и посмотрим, как округляется значение:
<?php
namespace AppController;
use AppEntityProduct;
use DoctrineORMEntityManagerInterface;
use SymfonyBundleFrameworkBundleControllerAbstractController;
use SymfonyComponentHttpFoundationResponse;
class ProductController extends AbstractController
{
public function create(EntityManagerInterface $em): Response
{
$product = new Product();
$product->setPrice('123.456789');
$em->persist($product);
$em->flush();
return new Response($product->getPrice());
}
}
?>
Результат выполнения кода:
"123.46"
Пример
Давайте изменим scale на четыре
и сравним результат:
<?php
namespace AppEntity;
use DoctrineORMMapping as ORM;
#[ORMEntity]
class Product
{
#[ORMId]
#[ORMGeneratedValue]
#[ORMColumn(type: 'integer')]
private ?int $id = null;
#[ORMColumn(type: 'decimal', precision: 10, scale: 4)]
private ?string $price = null;
public function getId(): ?int
{
return $this->id;
}
public function getPrice(): ?string
{
return $this->price;
}
public function setPrice(string $price): self
{
$this->price = $price;
return $this;
}
}
?>
Теперь колонка имеет тип DECIMAL(10,4).
Результат выполнения кода:
"123.4568"