我有一个CMS爱好项目,我在Symfony中运行更新时遇到问题。
我有三个相互链接的实体。
文章实体:
/**
* @var \StaticBundle\Entity\Revision
*
* @ORM\Id
* @ORM\GeneratedValue(strategy="NONE")
* @ORM\OneToOne(targetEntity="StaticBundle\Entity\Revision")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="revision", referencedColumnName="rid")
* })
*/
private $revision;
修订实体:
/**
* @var \StaticBundle\Entity\Content
*
* @ORM\ManyToOne(targetEntity="StaticBundle\Entity\Content")
* @ORM\JoinColumns({
* @ORM\JoinColumn(name="content", referencedColumnName="cid")
* })
*/
private $content;
内容实体:
这是一个简单明了的实体。这里没有关系。
控制器方法:
/**
* @param Entity $entity $form->getData(); (Can be Article, Page etc)
* @param Person $person The user (FOSUserBundle)
*/
private function newRevision($entity, $person) {
$em = $this->getDoctrine()->getManager();
// Either fetch Content Entity from DB or the $entity.
$content = $em->getRepository('StaticBundle:Content')
->find($entity->getRevision()->getContent()->getCid());
// Creating the new Revision Entity.
$revision = new Revision();
...
$revision->setContent($content);
// instantiating the node type. EX: Article
$contentType = $entity->getRevision()->getContent()->getContenttype();
$contentTypeObject = $contentType->getNamespace() . "\\" . $contentType->getName();
$newEntity = new $contentTypeObject();
$newEntity->setRevision($revision);
// Setting the value from the article form $entity to the new Entity
$object = new \ReflectionObject($newEntity);
foreach ($object->getMethods() as $method) {
if($method->name != "setRevision") {
if(substr($method->name, 0, 3) == "set") {
$set = (string)$method->name;
$get = "get" . substr($method->name, 3);
$newEntity->$set($entity->$get());
}
}
}
$em->flush();
dump($newEntity);
}
系统假设能够对"节点"进行多次修订。
EX: 内容ID:21可以 修订版ID:22(姓名:b) 修订版ID:23(名称:c)
但是当我想创建一个新版本(id:24名称:d)时,新版本和现有版本都会使用新名称进行更新。
所以现在它看起来像这样:
内容ID:21可以
修订版ID:22(姓名:b)
修订版ID:23(姓名:d)
修订版ID:24(姓名:d)
我该如何避免这种情况?该学说是通过简单的flush();
完成的