sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur prefixar man sekvensnamn?

Baserat på svaret härifrån:Hur man ställer in tabellen prefix i symfony2

  1. Öppna paketets Resources/config/services.yml och lägg till:

    parameters:
        mybundle.db.sequence_prefix: myprefix_
    
  2. Lägg till en ny tjänst:

    services:
        mybundle.sqprefix_subscriber:
            class: MyBundle\Subscriber\SequencePrefixSubscriber
            arguments: [%mybundle.db.sequence_prefix%]
            tags:
                - { name: doctrine.event_subscriber }
    
  3. Skapa 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);
                }
            }
        }
    }
    

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

Dokumentationen säger READ-ONLY för sequenceGeneratorDefinition egendom så jag tycker att det är renare att använda sättaren än att ändra värdet manuellt (men det finns ingen getter så vi använder bara det offentliga fastighetsvärdet).




  1. Wrap arrayelement i divs baserat på samma värde

  2. Java Ansluter till fjärr MySQL-databas

  3. Vad är det mest effektiva sättet att välja de sista n raderna i en tabell utan att ändra tabellens struktur?

  4. Klona en SQLite-databas