PostgreSQL
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> PostgreSQL

Làm thế nào để đặt tiền tố tên chuỗi?

Dựa trên câu trả lời từ đây: Cách thiết lập bảng tiền tố trong symfony2

  1. Mở Tài nguyên / config / services.yml của gói và thêm:

    Tham số
    parameters:
        mybundle.db.sequence_prefix: myprefix_
    
  2. Thêm dịch vụ mới:

    Các đối số
    services:
        mybundle.sqprefix_subscriber:
            class: MyBundle\Subscriber\SequencePrefixSubscriber
            arguments: [%mybundle.db.sequence_prefix%]
            tags:
                - { name: doctrine.event_subscriber }
    
  3. Tạo 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);
                }
            }
        }
    }
    

Tham khảo: http:// www .doctrine-project.org / api / orm / 2.0 / class-Doctrine.ORM.Mapping.ClassMetadataInfo.html

Tài liệu cho biết READ-ONLY cho sequenceGeneratorDefinition thuộc tính, vì vậy tôi nghĩ sử dụng setter sẽ tốt hơn là thay đổi giá trị theo cách thủ công (nhưng không có getter nên chúng tôi chỉ sử dụng giá trị thuộc tính công khai).




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. currval vẫn chưa được xác định phiên này, làm thế nào để có được chuỗi nhiều phiên?

  2. Làm thế nào để thả một cơ sở dữ liệu mẫu khỏi PostgreSQL?

  3. Làm thế nào để gắn nhãn các nhóm trong postgresql khi thuộc về nhóm phụ thuộc vào dòng trước?

  4. Lệnh COPY chính xác để tải dữ liệu postgreSQL từ tệp csv có dữ liệu được trích dẫn đơn?

  5. Tính toán khoảng cách giữa vị trí gps và giá trị địa lý postgis bằng cách sử dụng một hàm?