PostgreSQL
 sql >> Teknologi Basis Data >  >> RDS >> PostgreSQL

Bagaimana cara awalan nama urutan?

Berdasarkan jawaban dari sini:Cara menyiapkan tabel awalan di symfony2

  1. Buka Resources/config/services.yml bundel Anda dan tambahkan:

    parameters:
        mybundle.db.sequence_prefix: myprefix_
    
  2. Tambahkan layanan baru:

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

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

Dokumentasi mengatakan READ-ONLY untuk sequenceGeneratorDefinition properti jadi saya pikir lebih bersih menggunakan setter daripada mengubah nilainya secara manual (tetapi tidak ada pengambil jadi kami hanya menggunakan nilai properti publik).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Tidak dapat mengubah properti read-only transaksi di tengah transaksi

  2. Mengapa bilangan bulat yang tidak ditandatangani tidak tersedia di PostgreSQL?

  3. PostgreSQL :berikan string hingga saat ini DD/MM/YYYY

  4. java.sql.SQLException:Koneksi telah ditutup

  5. Diindeks ORDER BY dengan LIMIT 1