我在同一数据库中有 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();
但我觉得我缺少一些基本的东西。据我所知,没有从查询对象中完整设置记录的方法吗?
最佳答案
我自己对这个问题进行了更多研究,据我所知,使用 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();
'ON DUPLICATE KEY UPDATE' 是必需的,因为表 B 中的主键是非空的,因此当您尝试将记录 1 从表 A 复制到表 B 时,mysql 发现已经有 ID=1 的条目并抛出错误。
关于mysql - 复制具有关系的数据库记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4775204/