2017 © Pedro Peláez
 

library doctrine-dynamic-discriminator-map

Dynamic discriminator map for Doctrine ORM

image

facile-it/doctrine-dynamic-discriminator-map

Dynamic discriminator map for Doctrine ORM

  • Wednesday, April 18, 2018
  • by thomasvargiu
  • Repository
  • 4 Watchers
  • 2 Stars
  • 434 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 25 % Grown

The README.md

Doctrine Dynamic Discriminator Map

Build Status Code Coverage Scrutinizer Code Quality Latest Stable Version Total Downloads Latest Unstable Version License, (*1)

Adds ability do declare entity discriminator map using a configuration., (*2)

Installation

$ composer require facile-it/doctrine-dynamic-discriminator-map

Register the listener on Doctrine Event Manager

Example:, (*3)

<?php

use Doctrine\Common\EventManager;
use Doctrine\ORM\EntityManager;
use Doctrine\ORM\Tools\Setup;
use Facile\DoctrineDDM\Factory\MetadataConfigFactory;
use Facile\DoctrineDDM\MetadataListener;
use My\Namespace\Entity;

$metadataConfigFactory = new MetadataConfigFactory();
// discriminator map configuration
$metadataConfig = $metadataConfigFactory->createMetadata([
    Entity\Person::class => [ // parent class
        'discriminator_map' => [
            'teacher' => Entity\Teacher::class, // child class
            'student' => Entity\Student::class, // child class
        ],
    ],
]);

$metadataListener = new MetadataListener($metadataConfig);

$eventManager = new EventManager();
$eventManager->addEventSubscriber($metadataListener);

$config = Setup::createAnnotationMetadataConfiguration(
    [__DIR__ . '/src'],
    true,
    null,
    null,
    false
);
$connection = [
    'driver' => 'pdo_sqlite',
    'memory' => true,
];

$entityManager = EntityManager::create($connection, $config, $eventManager);

Entities

Create the parent entity:, (*4)

<?php

namespace My\Namespace\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 * @ORM\Table(name="person")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="type", type="string")
 * @ORM\DiscriminatorMap({"person" = "Person"})
 */
class Person
{
    // ...
}

Then you can declare the children entities:, (*5)

<?php

namespace My\Namespace\Entity;

use Doctrine\ORM\Mapping as ORM;

/**
 * @ORM\Entity
 */
class Student extends Person
{
    // ...
}

/**
 * @ORM\Entity
 */
class Teacher extends Person
{
    // ...
}

That's it!, (*6)

Frameworks Integration

Invokable factories

Facile\DoctrineDDM\Factory\MetadataConfigFactory and Facile\DoctrineDDM\Factory\MetadataListenerFactory have an __invoke() method that can be used with Interop\Container\ContainerInterface., (*7)

Facile\DoctrineDDM\Factory\MetadataConfigFactory will check for a config key where expects an array configuration.
Then it will check for Facile\DoctrineDDM\Factory\MetadataConfigFactory::CONFIG_KEY key where it expects the discriminator map configuration and returns a Facile\DoctrineDDM\Configuration\Metadata instance., (*8)

Facile\DoctrineDDM\Factory\MetadataListenerFactory will check for a service named Facile\DoctrineDDM\Configuration\Metadata (the configuration class) then will return a configured Facile\DoctrineDDM\MetadataListener instance., (*9)

Zend Framework and Zend Expressive

With DoctrineORMModule:, (*10)


use Facile\DoctrineDDM\MetadataListener; use Facile\DoctrineDDM\Factory\MetadataConfigFactory; use Facile\DoctrineDDM\Factory\MetadataListenerFactory; use Facile\DoctrineDDM\Configuration\Metadata; use My\Namespace\Entity; return [ 'service_manager' => [ // or "dependencies" for zend-expressive 'factories' => [ // register the configuration factory Metadata::class => MetadataConfigFactory::class, // register the metadata listener factory MetadataListener::class => MetadataListenerFactory::class, ], ], 'doctrine' => [ 'eventmanager' => [ 'orm_default' => [ 'subscribers' => [ // register MetadataListener MetadataListener::class, ], ], ], ], // declare discriminator map configuration used by MetadataConfigFactory MetadataConfigFactory::class => [ Entity\Person::class => [ // parent class 'discriminator_map' => [ 'teacher' => Entity\Teacher::class, // child class 'student' => Entity\Student::class, // child class ], ], ], ];

The Versions

18/04 2018

dev-master

9999999-dev

Dynamic discriminator map for Doctrine ORM

  Sources   Download

MIT

The Requires

 

The Development Requires

orm doctrine map inheritance discriminator

18/04 2018

0.2.0

0.2.0.0

Dynamic discriminator map for Doctrine ORM

  Sources   Download

MIT

The Requires

 

The Development Requires

orm doctrine map inheritance discriminator

03/02 2017

0.1.0

0.1.0.0

Dynamic discriminator map for Doctrine ORM

  Sources   Download

MIT

The Requires

 

The Development Requires

orm doctrine map inheritance discriminator