php - symfony doctrine 将一个实体对象移动到另一个实体类型

标签 php mysql symfony doctrine-orm

有什么方法可以使用 Doctrine 将行移动到另一个 mysql 表吗?

我正在搜索以下 mysql 的等效项:

INSERT myTableCopy (
   SELECT * FROM myTable WHERE id = 2
)

我期待这样的事情:

// $first is an object from  myTable
$this->getDoctrine()->getRepository('MyBundle:MyTable')->findOneBy(array('id' => 2));
$second = new myTableCopy();
$second = clone $first;

不幸的是(但逻辑上),$second 实体的类型是 myTable...

我该怎么做?

我知道我可以使用 prepare 语句,但我想知道我是否可以使用 Doctrine 函数之一来做到这一点。

仅供引用:我有一个巨大的表(数百万行),我想将旧数据移动到一个不会被如此使用的“备份表”

PS:我知道this thread正在提出以下解决方案,但我认为应该有更好的序列化器/规范化器方法......

 // now loop over the properties of each post array...
    foreach ($post as $property => $value) {
        // create a setter
        $method = sprintf('set%s', ucwords($property)); // or you can cheat and omit ucwords() because PHP method calls are case insensitive
        // use the method as a variable variable to set your value
        $post->$method($value);
    }

最佳答案

看了this post终于发现错误了来自@Colin M。

这是我的问题的最终解决方案:

$myOriginalObject = $this->getDoctrine()->getRepository('MyBundle:MyTable')->findOneBy(array('id' => 2));
// Here modify the original object if needed...

$myTableCopyObject = new myTableCopy();

$oldReflection = new \ReflectionObject($myOriginalObject);
$newReflection = new \ReflectionObject($myTableCopyObject);

foreach ($oldReflection->getProperties() as $property) {
    if ($newReflection->hasProperty($property->getName())) {
        $newProperty = $newReflection->getProperty($property->getName());
        $newProperty->setAccessible(true);
        $property->setAccessible(true);
        $newProperty->setValue($myTableCopyObject, $property->getValue($doi_tmp));
    }
}               

$this->em->persist($myTableCopyObject);
$this->em->remove($myOriginalObject);
$this->em->flush();

注意:当您拥有自增 ID 时,似乎只有 ID 不被保存

关于php - symfony doctrine 将一个实体对象移动到另一个实体类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33516846/

相关文章:

php - Laravel 4 在 Controller 中注入(inject) Eloquent 模型

php - 使用 MySQL 进行多区域市场数据库设计

php - 显示从星期一开始的周报告

php - 尝试使用Ajax和PHP制作登录表单

Symfony2,FOSUser,重置密码后不登录用户

php - 我应该如何处理这个涉及 c++ 重载库和 php 前端的 web 架构

php - 如何整合TCPDF?

phpMyAdmin - 缺少 MySQL 扩展

php - 如何跨子域共享 symfony2 session

php - 如何使用Symfony Mailer组件禁用 "verify_peer"?