Doctrine type

Les types Doctrine

Les numériques

  • integer smallint : pas plus de 65 535
  • integer integer : jusqu’à 4 millions, ou alors +2 millions/-2 millions
  • string bigint : sur 64 bits. c’est beaucoup
  • string decimal : si on connaît le nombre de chiffres après la virgule
  • float float : précision pas très importante, ça peut être arrondi

Les chaînes

  • string string : taille limitée par la DB, Doctrine peut le passer en texte
  • string text : no limit
  • string guid : global unique identifier. ex: filename iPhone, registre Windows
  • resource binary : images, médias, taille limitée par la DB, Doctrine peut le passer en blob
  • resource blob : no limit

Les bits

  • boolean boolean : true/false (en réalité c’est juste un int)

Les dates

  • \DateTime date date
  • \DateTime datetime date et heure
  • \DateTime datetimetz date, heure et décalage horaire (par rapport à UTC)
  • \DateTime time heure
  • \DateTime dateinterval écart entre dates
  • \DateTimeImmutable datetime_immutable
  • \DateTimeImmutable date_immutable
  • \DateTimeImmutable time_immutable

Mutable

$date = new \DateTime();
echo $date->format('y-m-d');	// '2020-09-25'
$bidule = $date->modify('+3 month');
echo $bidule->format('y-m-d'); // '2020-12-25'
echo $date->format('y-m-d');	// '2020-12-25' WTF ??

Immutable

$date = new \DateTimeImmutable();
echo $date->format('y-m-d');	// '2020-09-25'
$bidule = $date->modify('+3 month');
echo $bidule->format('y-m-d'); // '2020-12-25'
echo $date->format('y-m-d');	// '2020-09-25'

Les arrays

  • array array : sérialisé sous forme de texte dans la base
  • array simple_array : utilise implode et explode sur les virgules, tableau 1-dimension
  • array json : utilise json_decode pour la serialisation

Les objets

  • object object : marche pas bien, il vaut mieux sérialiser puis enregistrer en text

Explications: https://www.doctrine-project.org/projects/doctrine-dbal/en/2.12/reference/types.html#object

Les types custom

Ex : On veut un type Money.

CREATE DOMAIN MyMoney AS DECIMAL(18,3);

use Doctrine\DBAL\Types\Types
final class MoneyType extends Type
{
getSQLDeclaration() ‘MyMoney’
convertToPHPValue() Money($value)
convertToDatabaseValue() $value->toDecimal()
getName() ‘money’

Lien vers la doc. Doctrine : https://www.doctrine-project.org/projects/doctrine-dbal/en/2.12/reference/types.html#custom-mapping-types