sbolch/doctrine-ds-types

Doctrine DBAL types for php-ds structures.

Maintainers

Package info

github.com/sbolch/doctrine-ds-types

pkg:composer/sbolch/doctrine-ds-types

Fund package maintenance!

sbolch

Ko Fi

Buy Me A Coffee

Statistics

Installs: 0

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

dev-main 2026-03-02 15:54 UTC

This package is auto-updated.

Last update: 2026-03-02 16:01:24 UTC


README

Doctrine DBAL types for php-ds structures.

Supported types

Type names map 1:1 with php-ds structures:

  • set => Ds\Set (JSON array)
  • vector => Ds\Vector (JSON array)
  • deque => Ds\Deque (JSON array)
  • stack => Ds\Stack (JSON array)
  • queue => Ds\Queue (JSON array)
  • map => Ds\Map (JSON object)
  • priority_queue => Ds\PriorityQueue (PHP serialize() string)
  • pair => Ds\Pair (PHP serialize() string)

Installation

composer require sbolch/doctrine-ds-types

Requirements

  • PHP 8.4+
  • ext-ds or php-ds/php-ds
  • Doctrine DBAL 3.x or 4.x

Registering types (DBAL)

use Doctrine\DBAL\Types\Type;
use sbolch\DoctrineDsTypes\Type\SetType;
use sbolch\DoctrineDsTypes\Type\VectorType;
use sbolch\DoctrineDsTypes\Type\DequeType;
use sbolch\DoctrineDsTypes\Type\StackType;
use sbolch\DoctrineDsTypes\Type\QueueType;
use sbolch\DoctrineDsTypes\Type\MapType;
use sbolch\DoctrineDsTypes\Type\PriorityQueueType;
use sbolch\DoctrineDsTypes\Type\PairType;

Type::addType('set', SetType::class);
Type::addType('vector', VectorType::class);
Type::addType('deque', DequeType::class);
Type::addType('stack', StackType::class);
Type::addType('queue', QueueType::class);
Type::addType('map', MapType::class);
Type::addType('priority_queue', PriorityQueueType::class);
Type::addType('pair', PairType::class);

Symfony DBAL configuration

doctrine:
  dbal:
    types:
      set: sbolch\DoctrineDsTypes\Type\SetType
      vector: sbolch\DoctrineDsTypes\Type\VectorType
      deque: sbolch\DoctrineDsTypes\Type\DequeType
      stack: sbolch\DoctrineDsTypes\Type\StackType
      queue: sbolch\DoctrineDsTypes\Type\QueueType
      map: sbolch\DoctrineDsTypes\Type\MapType
      priority_queue: sbolch\DoctrineDsTypes\Type\PriorityQueueType
      pair: sbolch\DoctrineDsTypes\Type\PairType

Doctrine ORM mapping (example)

#[ORM\Column(type: 'set')]
public Set $roles;

Notes

  • JSON-backed types store null as null and read null back to null.
  • priority_queue uses serialize() because Ds\PriorityQueue does not expose priorities via its public API.
  • pair uses serialize() because Ds\Pair is not JSON-serializable.