composer require mapado/pretty-typesCompatible with doctrine/dbal 2.6+, 3.x and 4.x.
Based on Doctrine DBAL types.
Will store pretty printed JSON into database.
In your config file
# Doctrine Configuration
doctrine:
dbal:
types:
json_pretty: Mapado\PrettyTypes\JsonPrettyTypeIn your entities
/**
* ...
*
* @ORM\Column(name="column_name", type="json_pretty")
*/If you want to store datetime in UTC in your database.
Copied version from Working with DateTime Instances.
All credits goes to the doctrine team !
In your config file
# Doctrine Configuration
doctrine:
dbal:
types:
datetime: Mapado\PrettyTypes\UTCDateTimeType
datetime_immutable: Mapado\PrettyTypes\UTCDateTimeImmutableType
datetimetz: Mapado\PrettyTypes\UTCDateTimeTypeBe aware that this will override all datetimes configured with doctrine.
If you do not want to override everything and use a custom types instead:
# Doctrine Configuration
doctrine:
dbal:
types:
utcdatetime: Mapado\PrettyTypes\UTCDateTimeType
utc_datetime_immutable: Mapado\PrettyTypes\UTCDateTimeImmutableTypeIn your entities, if you overrode the default datetime types, Doctrine will implicitly use the new types for all datetime fields:
#[ORM\Column]
private \DateTime $someDate;
#[ORM\Column]
private \DateTimeImmutable $someDate;UTCDateTimeType accepts both \DateTime and \DateTimeImmutable values when writing to the database.
You should store the timezone next to the datetime too. Read the doctrine documentation for more informations.
If you configured a custom type, use this instead:
#[ORM\Column(type: 'utcdatetime')]
private \DateTime $someDate;
#[ORM\Column(type: 'utc_datetime_immutable')]
private \DateTimeImmutable $someDate;doctrine/dbal 4 dropped the built-in array type (PHP serialize() stored in a text column).
LegacyArrayType is a port of the DBAL 3 ArrayType, so an application upgrading to DBAL 4 keeps reading and writing its existing array columns, with one restriction on objects (see below).
In your config file
# Doctrine Configuration
doctrine:
dbal:
types:
array: Mapado\PrettyTypes\LegacyArrayTypeIn your entities
#[ORM\Column(type: 'array')]
private array $someArray;Prefer the json type for new columns: this type only exists to keep existing data readable.
Unlike the DBAL 3 ArrayType, it only unserializes DateTime and DateTimeImmutable objects (enum cases are restored too).
Any other object stored in the column comes back as __PHP_Incomplete_Class.
Dates are allowed because overriding array also covers third-party mappings, such as Gedmo Loggable's AbstractLogEntry::$data, which stores them in its changesets.
This project is licensed under the MIT license.