<分区>
我知道how to set up a table prefix in symfony2 ,但现在我想对 postgres 序列做同样的事情。我怎样才能做到这一点?这可能吗?
<分区>
我知道how to set up a table prefix in symfony2 ,但现在我想对 postgres 序列做同样的事情。我怎样才能做到这一点?这可能吗?
最佳答案
基于此处的答案:How to setup table prefix in symfony2
打开您的包的 Resources/config/services.yml 并添加:
parameters:
mybundle.db.sequence_prefix: myprefix_
添加新服务:
services:
mybundle.sqprefix_subscriber:
class: MyBundle\Subscriber\SequencePrefixSubscriber
arguments: [%mybundle.db.sequence_prefix%]
tags:
- { name: doctrine.event_subscriber }
创建 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
文档为 sequenceGeneratorDefinition
属性说明了 READ-ONLY
所以我认为使用 setter 比手动更改值更干净(但是没有 getter 所以我们只需使用公共(public)属性值)。
关于postgresql - 如何为序列名称添加前缀?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19380177/
相关文章:
postgresql - 如何将 HashMap 作为 JSON 类型插入到 PostgreSQL 中?
sql - 如何在 SQL 中获取 "top X with the rest"?
node.js - 未处理的拒绝 SequelizeConnectionRefusedError : connect ECONNREFUSED 127. 0.0.1:5432 with dockers
php/symfony2 从 URL 中隐藏 app.php
php - 如何将 Symfony 参数解析为 Alice 的 fixtures.yml 文件
doctrine-orm - Symfony - 在 INSERT、UPDATE 或 DELETE 中以不同方式验证实体