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