2011-01-23 72 views
2

我在同一個數據庫中有兩組表 - 一個活動集和一個測試集。每個集合都有兩個表格 - 表格A和表格B - 它們之間具有一對多的關係。複製關係數據庫記錄

我需要做的是從測試集的表A中選擇某些記錄,並將記錄的全部內容以及它們在表B中的關係複製到活動表集中。這些設置的結構是相同的。

是否可以做到這一點,而不必手動打破記錄?

我在symfony 1.4 PHP框架的上下文中使用了doctrine ORM(1.2我認爲)。

到目前爲止,我一直在嘗試這樣的事:

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

但是,我感到我失去了一些東西根本感覺。據我所知,沒有辦法從查詢對象中完整設置記錄?

+0

這是一個常規操作還是一個計時器? – 2011-01-23 17:28:54

回答

2

我對這個問題做了更多自己的研究,並且據我所知,使用ORM進行這種類型的操作首先是一個壞主意,因爲所有不必要的開銷都涉及到。

只用一個原始的「INSERT INTO」語句就可以了,而這正是我現在正在做的事情。

$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(); 

的「對重複密鑰更新」是必要的,因爲在表B中的主鍵非空,爲此,當您嘗試從表中複製記錄1到表B mysql的發現有已經是一款入門ID = 1並引發錯誤。