我正在开发一个Web应用程序,用户可以在其中切换希望记录数据的表。我的意思是,在同一个表中可能有一个测试模式表和另一个测试模式表。例如,我在两种模式下都有一个tab_article,但是它们中的列是相同的,所以我只想为它们使用一个实体类,但它将取决于用户选择是要将数据放在表中以便产生还是放入测试。在同一个数据库中使用一个实体symfony类用于2个或多个表
我还计划让管理员创建其他模式,这样我将动态生成任何他创建的模式的表格。
我寻找任何建议。
谢谢你的回答。
我正在开发一个Web应用程序,用户可以在其中切换希望记录数据的表。我的意思是,在同一个表中可能有一个测试模式表和另一个测试模式表。例如,我在两种模式下都有一个tab_article,但是它们中的列是相同的,所以我只想为它们使用一个实体类,但它将取决于用户选择是要将数据放在表中以便产生还是放入测试。在同一个数据库中使用一个实体symfony类用于2个或多个表
我还计划让管理员创建其他模式,这样我将动态生成任何他创建的模式的表格。
我寻找任何建议。
谢谢你的回答。
解决此问题的更简单的方法是处理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);
}
}
谢谢,我将测试它是否能解决问题。那么这个函数会改变实体声明中链接表的名字吗?或者我错了? –
是的。如果你需要重命名实体表,你只需要添加'_env'前缀。例如'@Entity(name =“_ env_table”)'。在这种情况下,根据'env',它将变成'prod_table'或'test_table' ... – Ziumin
非常棒!谢谢。我正在测试它。我会在之后给出结果。 –
你为什么不使用不同的数据库测试和生产,在配置文件中添加条件。 – Developer
谢谢你的回答, 我想过,但我的问题是,我有一些表,这是所有模式,如tab_user例如,所以如果我使用不同的数据库,如果管理员插入一个用户和选择模式产品时,用户不会在其他模式下创建。 –