如何在symfony2中设置表前缀 [英] How to setup table prefix in symfony2

查看:89
本文介绍了如何在symfony2中设置表前缀的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

像问题主题一样,如何在symfony2中设置默认表前缀?

Like in question topic, how can I setup default table prefix in symfony2?

如果可以为所有实体默认设置最佳,但选项为

The best if it can be set by default for all entities, but with option to override for individual ones.

推荐答案

刚刚想出了这一点,我想清楚一下如何完成这个。

Having just figured this out myself, I'd like to shed some light on exactly how to accomplish this.

Symfony 2& Doctrine 2.1

注意:我使用YML进行配置,所以这就是我要显示的。

Symfony 2 & Doctrine 2.1
Note: I use YML for config, so that's what I'll be showing.


  1. 打开您的软件包的资源/ config / services.yml

  1. Open up your bundle's Resources/config/services.yml

定义表前缀参数:

请确保更改mybundle
em> myprefix _

Define a table prefix parameter:
Be sure to change mybundle and myprefix_

parameters:
    mybundle.db.table_prefix: myprefix_


  • 添加新服务:

  • Add a new service:

    services:
        mybundle.tblprefix_subscriber:
            class: MyBundle\Subscriber\TablePrefixSubscriber
            arguments: [%mybundle.db.table_prefix%]
            tags:
                - { name: doctrine.event_subscriber }
    


  • > MyBundle\Subscriber\TablePrefixSubscriber.php

    <?php
    namespace MyBundle\Subscriber;
    
    use Doctrine\ORM\Event\LoadClassMetadataEventArgs;
    
    class TablePrefixSubscriber 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()) {
                // if we are in an inheritance hierarchy, only apply this once
                return;
            }
    
            $classMetadata->setTableName($this->prefix . $classMetadata->getTableName());
    
            foreach ($classMetadata->getAssociationMappings() as $fieldName => $mapping) {
                if ($mapping['type'] == \Doctrine\ORM\Mapping\ClassMetadataInfo::MANY_TO_MANY 
                        && array_key_exists('name', $classMetadata->associationMappings[$fieldName]['joinTable']) ) {     // Check if "joinTable" exists, it can be null if this field is the reverse side of a ManyToMany relationship
                    $mappedTableName = $classMetadata->associationMappings[$fieldName]['joinTable']['name'];
                    $classMetadata->associationMappings[$fieldName]['joinTable']['name'] = $this->prefix . $mappedTableName;
                }
            }
        }       
    }
    


  • p> postgres用户的可选步骤:对序列进行类似操作

    这篇关于如何在symfony2中设置表前缀的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆