如何给序列名称加前缀? [关闭]
问题:如何给序列名称加前缀? [关闭] 我知道如何在 symfony2中设置表前缀,但现在我想对 postgres 序列做同样的事情。我怎样才能做到这一点?这甚至可能吗? 解答 基于这里的答案:How to setup table prefix in symfony2 打开你的包的 Resources/config/services.yml 并添加: 参数: mybundle.db.sequenc
·
问题:如何给序列名称加前缀? [关闭]
我知道如何在 symfony2中设置表前缀,但现在我想对 postgres 序列做同样的事情。我怎样才能做到这一点?这甚至可能吗?
解答
基于这里的答案:How to setup table prefix in symfony2
- 打开你的包的 Resources/config/services.yml 并添加:
参数:
mybundle.db.sequence_prefix: myprefix_
2.添加新服务:
服务:
mybundle.sqprefix_subscriber:
类:MyBundle\Subscriber\SequencePrefixSubscriber
参数:[%mybundle.db.sequence_prefix%]
标签:
- {名称:教义.event_subscriber }
- 创建 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,所以我们只使用公共属性值)。
更多推荐
已为社区贡献19912条内容
所有评论(0)