Поле float
Поле float в Doctrine ORM предназначено для хранения чисел с плавающей точкой. Оно преобразует значение базы данных в PHP-тип float и обратно. Обычно используется для хранения величин, где важна дробная часть: координаты, проценты, рейтинги, научные расчёты. В отличие от decimal, поле float не гарантирует точность до последнего знака, но занимает меньше места и работает быстрее.
Синтаксис
#[ORM\Column(type: 'float', precision: precision, scale: scale, nullable: nullable)]
private float $property;
Параметр precision задаёт общее количество цифр в числе, а scale - количество цифр после запятой. Параметр nullable разрешает или запрещает значение null.
Пример
Давайте создадим сущность Product с полем price типа float:
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
#[ORM\Entity]
class Product
{
#[ORM\Id]
#[ORM\GeneratedValue]
#[ORM\Column(type: 'integer')]
private int $id;
#[ORM\Column(type: 'string', length: 255)]
private string $name;
#[ORM\Column(type: 'float', precision: 10, scale: 2)]
private float $price;
public function getId(): int
{
return $this->id;
}
public function getName(): string
{
return $this->name;
}
public function setName(string $name): void
{
$this->name = $name;
}
public function getPrice(): float
{
return $this->price;
}
public function setPrice(float $price): void
{
$this->price = $price;
}
}
?>
Теперь создадим контроллер, который сохранит товар с ценой и выведет её:
<?php
namespace App\Controller;
use App\Entity\Product;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ProductController extends AbstractController
{
#[Route('/product', name: 'product_create')]
public function create(EntityManagerInterface $em): Response
{
$product = new Product();
$product->setName('article');
$product->setPrice(19.99);
$em->persist($product);
$em->flush();
return new Response((string) $product->getPrice());
}
}
?>
Результат выполнения кода:
"19.99"
Пример
Давайте найдём товар по id и выведем его цену с округлением:
<?php
namespace App\Controller;
use App\Entity\Product;
use Doctrine\ORM\EntityManagerInterface;
use Symfony\Bundle\FrameworkBundle\Controller\AbstractController;
use Symfony\Component\HttpFoundation\Response;
use Symfony\Component\Routing\Attribute\Route;
class ProductController extends AbstractController
{
#[Route('/product/{id}', name: 'product_show')]
public function show(int $id, EntityManagerInterface $em): Response
{
$product = $em->getRepository(Product::class)->find($id);
$price = $product->getPrice();
$rounded = round($price, 1);
return new Response((string) $rounded);
}
}
?>
Результат выполнения кода для товара с ценой 19.99:
"20"