PHP code example of facile-it / doctrine-dynamic-discriminator-map

1. Go to this page and download the library: Download facile-it/doctrine-dynamic-discriminator-map library. Choose the download type require.

2. Extract the ZIP file and open the index.php.

3. Add this code to the index.php.
    
        
<?php
require_once('vendor/autoload.php');

/* Start to develop here. Best regards https://php-download.com/ */

    

facile-it / doctrine-dynamic-discriminator-map example snippets




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

 


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
{
    // ...
}



namespace My\Namespace\Entity;

use Doctrine\ORM\Mapping as ORM;

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

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


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
            ],
        ],
    ],
];