sql >> Database >  >> RDS >> PostgreSQL

Hoe sequentienamen voorvoegen?

Gebaseerd op het antwoord van hier:Hoe een tabel in te stellen voorvoegsel in symfony2

  1. Open de Resources/config/services.yml van uw bundel en voeg toe:

    parameters:
        mybundle.db.sequence_prefix: myprefix_
    
  2. Een nieuwe dienst toevoegen:

    services:
        mybundle.sqprefix_subscriber:
            class: MyBundle\Subscriber\SequencePrefixSubscriber
            arguments: [%mybundle.db.sequence_prefix%]
            tags:
                - { name: doctrine.event_subscriber }
    
  3. Maak MyBundle\Subscriber\SequencePrefixSubscriber.php

    <?php
    namespace MyBundle\Subscriber;
    
    use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
    
    class SequencePrefixSubscriber implements \Doctrine\Common\EventSubscriber
    {
        protected $prefix = '';
    
        public function __construct($prefix)
        {
            $this->prefix = (string) $prefix;
        }
    
        public function getSubscribedEvents()
        {
            return array('loadClassMetadata');
        }
    
        public function loadClassMetadata(LoadClassMetadataEventArgs $args)
        {
            $classMetadata = $args->getClassMetadata();
            if ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity()) {
                return;
            }
    
    
            if ($classMetadata->isIdGeneratorSequence())
            {
                $newDefinition = $classMetadata->sequenceGeneratorDefinition;
                $newDefinition['sequenceName'] = $this->prefix . $newDefinition['sequenceName'];
    
                $classMetadata->setSequenceGeneratorDefinition($newDefinition);
                $em = $args->getEntityManager();
                if (isset($classMetadata->idGenerator)) {
                    $sequenceGenerator = new \Doctrine\ORM\Id\SequenceGenerator(
                        $em->getConfiguration()->getQuoteStrategy()->getSequenceName(
                            $newDefinition,
                            $classMetadata,
                            $em->getConnection()->getDatabasePlatform()),
                        $newDefinition['allocationSize']
                    );
                    $classMetadata->setIdGenerator($sequenceGenerator);
                }
            }
        }
    }
    

Referentie:http://www .doctrine-project.org/api/orm/2.0/class-Doctrine.ORM.Mapping.ClassMetadataInfo.html

De documentatie zegt READ-ONLY voor de sequenceGeneratorDefinition eigendom, dus ik denk dat het schoner is om de setter te gebruiken dan de waarde handmatig te wijzigen (maar er is geen getter, dus gebruiken we gewoon de waarde van het openbare eigendom).




  1. SQL Update-query met group by-clausule

  2. Haal de id op van het laatst ingevoegde record in mybatis

  3. django.db.utils.OperationalError:(1045:Toegang geweigerd voor gebruiker 'root'@'localhost' (met wachtwoord:NEE)

  4. 5 meest voorkomende waarden/voorkomende id's krijgen?