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. 巨大なMySQLテーブルを削除する最も簡単な方法

    2. JDBC経由で接続するときにセッション情報にアプリケーション名を表示する

    3. データベーススキーマオブジェクトチェックの自動化

    4. json列キーがnullであるレコードを取得します