2016-06-28 61 views
1

我正在开发一个Web应用程序,用户可以在其中切换希望记录数据的表。我的意思是,在同一个表中可能有一个测试模式表和另一个测试模式表。例如,我在两种模式下都有一个tab_article,但是它们中的列是相同的,所以我只想为它们使用一个实体类,但它将取决于用户选择是要将数据放在表中以便产生还是放入测试。在同一个数据库中使用一个实体symfony类用于2个或多个表

我还计划让管理员创建其他模式,这样我将动态生成任何他创建的模式的表格。

我寻找任何建议。

谢谢你的回答。

+1

你为什么不使用不同的数据库测试和生产,在配置文件中添加条件。 – Developer

+0

谢谢你的回答, 我想过,但我的问题是,我有一些表,这是所有模式,如tab_user例如,所以如果我使用不同的数据库,如果管理员插入一个用户和选择模式产品时,用户不会在其他模式下创建。 –

回答

0

解决此问题的更简单的方法是处理Doctrine事件。

简单听众例如:

class TableEnvRenameListener 
{ 
    private $env; 
    public function __construct($env) 
    { 
     $this->env = $env; 
    } 

    public function loadClassMetadata(LoadClassMetadataEventArgs $eventArgs) 
    { 
     $classMetadata = $eventArgs->getClassMetadata(); 
     $table = $classMetadata->table; 
     $table['name'] = str_replace('_env', $this->env, $table['name']); 
     $classMetadata->setPrimaryTable($table); 
    } 
} 
+0

谢谢,我将测试它是否能解决问题。那么这个函数会改变实体声明中链接表的名字吗?或者我错了? –

+0

是的。如果你需要重命名实体表,你只需要添加'_env'前缀。例如'@Entity(name =“_ env_table”)'。在这种情况下,根据'env',它将变成'prod_table'或'test_table' ... – Ziumin

+0

非常棒!谢谢。我正在测试它。我会在之后给出结果。 –

相关问题