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