2011-01-23 9 views
2

同じデータベースに2セットのテーブルがあります。ライブセットとテストセットです。各セットにはテーブルAとテーブルBの2つのテーブルがあり、それらの間には一対多の関係があります。私がする必要がどのようなリレーションを持つデータベースレコードのコピー

はテストセットでテーブルAから特定のレコードを選択して、ライブのテーブルセットに、テーブルBでの関係とともに、それらの全体がレコードをコピーすることです。セットの構造は同じです。

それは手動でレコードを破ることなく、これを実行することは可能でしょうか?

私はsymfony 1.4 PHPフレームワークのコンテキストで(1.2私は思う)教義ORMを使用しています。

これまでのところ、私はこのような何かしようとしてきた:

$record = Doctrine_Core::getTable('testSetTableA')->find(1); 
$liveSetTableArecord = new LiveSetTableArecord(); 
$liveSetTableArecord = $record->copy(); 
$liveSetTableArecord->save(); 

をしかし、私は、私は基本的な何かが欠けてる感覚を得ます。私が知る限り、レコード全体をクエリオブジェクトから設定する方法はありません。

+0

通常の操作ですか、ワンタッチですか? –

+1

あなたはあなたの解決策を回答として掲示して、それがこの問題から脱出する良い方法だと思うなら、それを受け入れることができます。 – greg0ire

答えて

2

私はこの問題に私自身の研究の多くを行なったし、私の知る限り、操作のこのタイプのためのORMを使用して、把握することができますよう伴うため、すべての不要なオーバーヘッドの最初の場所でちょうど悪い考えです。

それはちょうど私が今やっているとする声明生「INTO INSERT」を使用してはるかに効率的です。テーブルBの主キーがnullであるため、

$connection = Doctrine_Manager::connection(); 
    $query = "INSERT INTO Set2tableA SELECT * FROM Set1tableA WHERE id = '$id' ON DUPLICATE KEY UPDATE Set2tableA.id = Set2tableA.id"; 
    $statement = $connection->execute($query); 
    $statement->execute(); 

    $query2 = "INSERT INTO Set2TableB SELECT * FROM Set1TableB WHERE tableA_id = '$id' ON DUPLICATE KEY UPDATE Set2TableB.id = Set1TableB.id"; 
    $statement = $connection->execute($query2); 
    $statement->execute(); 

「DUPLICATE ON KEY UPDATEが」必要であり、そのためには、表のB mysqlのにテーブルAからレコード1をコピーしようとすると、エントリがすでに存在していることを発見ID = 1でエラーをスローします。

関連する問題