Search by

mapado / pretty-types

jdeniaumapado

Doctrine Type storing pretty printed JSON into database

Package info

github.com/mapado/pretty-types

pkg:composer/mapado/pretty-types

Statistics

Installs: 14 669

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v1.2.0 2026-09-15 13:04 UTC

This package is auto-updated.

Last update: 2026-09-15 13:07:15 UTC


README

Installation

composer require  mapado/pretty-types

Compatible with doctrine/dbal 2.6+, 3.x and 4.x.

JSON pretty

Based on Doctrine DBAL types.

Will store pretty printed JSON into database.

Configuration

In your config file

# Doctrine Configuration
doctrine:
  dbal:
    types:
      json_pretty: Mapado\PrettyTypes\JsonPrettyType

Usage

In your entities

/**
 * ...
 *
 * @ORM\Column(name="column_name", type="json_pretty")
 */

UTCDateTime

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 !

Configuration

In your config file

# Doctrine Configuration
doctrine:
  dbal:
    types:
      datetime: Mapado\PrettyTypes\UTCDateTimeType
      datetime_immutable: Mapado\PrettyTypes\UTCDateTimeImmutableType
      datetimetz: Mapado\PrettyTypes\UTCDateTimeType

Be 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\UTCDateTimeImmutableType

Usage

In 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;

Legacy array

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.

Configuration

In your config file

# Doctrine Configuration
doctrine:
  dbal:
    types:
      array: Mapado\PrettyTypes\LegacyArrayType

Usage

In 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.

License

This project is licensed under the MIT license.