Basierend auf der Antwort von hier:How to setup table Präfix in symfony2
-
Öffnen Sie die Resources/config/services.yml Ihres Bundles und fügen Sie hinzu:
parameters: mybundle.db.sequence_prefix: myprefix_
-
Neuen Dienst hinzufügen:
services: mybundle.sqprefix_subscriber: class: MyBundle\Subscriber\SequencePrefixSubscriber arguments: [%mybundle.db.sequence_prefix%] tags: - { name: doctrine.event_subscriber }
-
Erstellen Sie 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); } } } }
Referenz:http://www .doctrine-project.org/api/orm/2.0/class-Doctrine.ORM.Mapping.ClassMetadataInfo.html
Die Dokumentation sagt READ-ONLY
für die sequenceGeneratorDefinition
Eigenschaft, daher denke ich, dass es sauberer ist, den Setter zu verwenden, als den Wert manuell zu ändern (aber es gibt keinen Getter, also verwenden wir einfach den öffentlichen Eigenschaftswert).