有什么方法可以使用 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/