问题:如何给序列名称加前缀? [关闭]

我知道如何在 symfony2中设置表前缀,但现在我想对 postgres 序列做同样的事情。我怎样才能做到这一点?这甚至可能吗?

解答

基于这里的答案:How to setup table prefix in symfony2

  1. 打开你的包的 Resources/config/services.yml 并添加:
参数:
mybundle.db.sequence_prefix: myprefix_

2.添加新服务:

服务:
mybundle.sqprefix_subscriber:
类:MyBundle\Subscriber\SequencePrefixSubscriber
参数:[%mybundle.db.sequence_prefix%]
标签:
- {名称:教义.event_subscriber }
  1. 创建 MyBundle\Subscriber\SequencePrefixSubscriber.php
<?php
命名空间 MyBundle\订阅者;

使用 Doctrine\ORM\Event\LoadClassMetadataEventArgs;

类 SequencePrefixSubscriber 实现 \Doctrine\Common\EventSubscriber
{
受保护的 $prefix u003d '';

公共函数 __construct($prefix)
{
$this->prefix u003d (string) $prefix;
}

公共函数 getSubscribedEvents()
{
返回数组('loadClassMetadata');
}

公共函数 loadClassMetadata(LoadClassMetadataEventArgs $args)
{
$classMetadata u003d $args->getClassMetadata();
if ($classMetadata->isInheritanceTypeSingleTable() && !$classMetadata->isRootEntity()) {
返回;
}


if ($classMetadata->isIdGeneratorSequence())
{
$newDefinition u003d $classMetadata->sequenceGeneratorDefinition;
$newDefinition['sequenceName'] u003d $this->prefix 。 $newDefinition['sequenceName'];

$classMetadata->setSequenceGeneratorDefinition($newDefinition);
$em u003d $args->getEntityManager();
if (isset($classMetadata->idGenerator)) {
$sequenceGenerator u003d 新 \Doctrine\ORM\Id\SequenceGenerator(
$em->getConfiguration()->getQuoteStrategy()->getSequenceName(
$新定义,
$类元数据,
$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属性,所以我认为使用 setter 比手动更改值更干净(但没有 getter,所以我们只使用公共属性值)。

Logo

PostgreSQL社区为您提供最前沿的新闻资讯和知识内容

更多推荐