PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

अनुक्रम नामों को उपसर्ग कैसे करें?

यहाँ से उत्तर के आधार पर:टेबल कैसे सेट करें symfony2 में उपसर्ग

  1. अपने बंडल के Resources/config/services.yml खोलें और जोड़ें:

    parameters:
        mybundle.db.sequence_prefix: myprefix_
    
  2. एक नई सेवा जोड़ें:

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

संदर्भ:http://www .doctrine-project.org/api/orm/2.0/class-Doctrine.ORM.Mapping.ClassMetadataInfo.html

दस्तावेज़ कहता है READ-ONLY sequenceGeneratorDefinition . के लिए संपत्ति इसलिए मुझे लगता है कि मैन्युअल रूप से मूल्य बदलने की तुलना में सेटर का उपयोग करना क्लीनर है (लेकिन कोई गेटर नहीं है इसलिए हम केवल सार्वजनिक संपत्ति मूल्य का उपयोग करते हैं)।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीजी क्लाइंट.क्वेरी () प्रतीक्षा में प्रतीक्षा नहीं करता है

  2. Postgresql संग्रहीत कार्यविधि वापसी परिणाम सेट का चयन करें

  3. पोस्टग्रेएसक्यूएल में एलपीएडी () फ़ंक्शन

  4. केवल न्यूनतम COUNT() के साथ पंक्तियों और स्तंभों (a.k.a. पिवट) को स्थानांतरित करें?

  5. कई पोस्टग्रेज स्कीमा के लिए Django इकाई परीक्षण विफल