mysql - 复制具有关系的数据库记录

标签 mysql symfony1 doctrine

我在同一数据库中有 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/

相关文章:

php - Symfony sfGuardPlugin 密码恢复

php - 交响乐 : Get key value from object doctrine

php - Symfony 忽略 web/中的目录

windows - Windows Azure 云上的 Symfony 框架

MYSQL - 如果选择日期中没有行,如何设置零

MySQL:打印每列前3个值的行的名称

php - 我们可以在 symfony2 的多个包中使用通用( Doctrine )orm 文件吗?

php - symfony 过滤器将行为从 [field=value] 更改为 [field LIKE %value%]

MySQL - 无法创建表(errno : 150) - Foreign key constraints

php - 具有动态值的空 SUM()