PHP8.1, Enum třídy a Doctrine
Jednou z novinek PHP8.1 je i podpora Enum tříd. Tento zápisek vznikl jako stručné intro k tomu, jak lze tuto novinku používat ve spojení s Doctrine.
Podpora Enum tříd se do Doctrine dostávala postupně, ale od verze 2.12.0 je snadné je v Symfony Entitách a Repozitářích Enumy používat. Podporované jsou BackedEnums, které obsahují string
nebo int
hodnotu, kterou je možné perzistovat do databáze.
Příklad - definice enum třídy
<?php
namespace App\Enum\Advert;
enum EstateType: string
{
case FLAT = 'flat';
case HOUSE = 'house';
}
Příklad - definice entity
Definice parametru estateType
- V anotaci musí být MySQL typ
string
neboint
podle typu Enumu. - Do anotace je nutné přidat enumType, např.
enumType=Enum\Advert\EstateType::class
- Je možné nadefinovat defaultní hodnotu pomocí Enumu.
- Enumy lze použít i u parametrů typu array.
Gettery a Settery
Při využití Enumu v definici parametru již není nutné pracovat s konkrétními hodnotami (string nebo int), protože Doctrine vrací přímo Enum.
<?php
namespace App\Entity;
use Doctrine\ORM\Mapping as ORM;
use App\Enum;
/**
* @ORM\Table(name="advert")
* @ORM\Entity(repositoryClass="App\Repository\AdvertRepository")
*/
class Advert
{
...
/**
* @ORM\Column(
* name="estate_type",
* type="string",
* enumType=Enum\Advert\EstateType::class,
* length=20,
* nullable=false
* )
*/
private Enum\Advert\EstateType $estateType = Enum\Advert\EstateType::FLAT;
public function setEstateType(Enum\Advert\EstateType $estateType): Advert
{
$this->estateType = $estateType;
return $this;
}
public function getEstateType(): Enum\Advert\EstateType
{
return $this->estateType;
}
...
Repozitář
S Enumy je možné rovněž pracovat i v metodách findBy z repozitářů.
$advertRepository = $this->em->getRepository(Entity\Advert::class);
return $advertRepository->findBy(['estateType' => Enum\Advert\EstateType::FLAT]);
Lze je rovněž zadávat i jako hodnoty parametrů pro QueryBuilder.
$qb = $this->createQueryBuilder('advert');
$qb
->where('advert.estateType = :estateType')
->setParameter('estateType', Enum\Advert\EstateType::FLAT);
Mohlo by vás také zajímat
Sentry Performance, PHP a GraphQL
Jak využít Sentry Performance pro monitoring výkonu PHP aplikace včetně výkonu GraphQL API.
Číst víceSymfony, lokální server a důvěryhodný SSL certifikát v Chrome
Nastavte si důvěryhodný certifikát v Chrome i pro vývoj Symfony aplikací
Číst víceNGINX, PHP-FPM a memory_limit
Nastavení memory limitu pro PHP v konfiguraci NGINX a PHP-FPM
Číst vícePotřebujete více informací?
Zpráva byla úspěšně odeslána.
Děkujeme
Omlouváme se, ale zprávu se nepovedlo odeslat.
Budeme rádi, když nám o tomto dáte vědět na info@id-sign.com