2016-06-28 7 views
1

私は、ユーザがデータを記録したいテーブルを切り替えることができるWebアプリケーションを開発しています。つまり、同じテーブルにテストモード用のテーブルとプロードモード用のテーブルが存在する可能性があります。例えば、私は両方のモードでtab_articleを持っていますが、それらの列は同じですので、私はそれらのためにただ1つのエンティティクラスを使用したいと思いますが、データがprodのためにテーブルに入るか、テスト。同じデータベース内の2つ以上のテーブルに対して1つのエンティティsymfonyクラスを使用する

また、管理者が他のモードを作成できるようにするため、作成するモードごとにすべてのテーブルを動的に生成します。

私はどんな提案も探します。

ありがとうございます。

+1

。 – Developer

+0

答えていただきありがとうございます。 私はそれについて考えましたが、私の問題はtab_userのようなすべてのモードで共通のテーブルがあることにあります。たとえば、管理者が別のデータベースを使用する場合、モードprodが選択された場合、ユーザーは他のモードでは作成されません。 –

答えて

0

この問題を解決する簡単な方法は、loadClassMetadata 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

優秀!ありがとうございました。私は今それをテストしています。私は後に結果を与えるでしょう。 –

関連する問題