Baserat på svaret härifrån:Hur man ställer in tabellen prefix i symfony2
-
Öppna paketets Resources/config/services.yml och lägg till:
parameters: mybundle.db.sequence_prefix: myprefix_
-
Lägg till en ny tjänst:
services: mybundle.sqprefix_subscriber: class: MyBundle\Subscriber\SequencePrefixSubscriber arguments: [%mybundle.db.sequence_prefix%] tags: - { name: doctrine.event_subscriber }
-
Skapa 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); } } } }
Referens:http://www. .doctrine-project.org/api/orm/2.0/class-Doctrine.ORM.Mapping.ClassMetadataInfo.html
Dokumentationen säger READ-ONLY
för sequenceGeneratorDefinition
egendom så jag tycker att det är renare att använda sättaren än att ändra värdet manuellt (men det finns ingen getter så vi använder bara det offentliga fastighetsvärdet).