Doctrine Symfony3的更新稍微多了一点

Doctrine Symfony3的更新稍微多了一点,doctrine,entity,symfony,Doctrine,Entity,Symfony,我有一个CMS爱好项目,在Symfony中运行更新时遇到问题 我有三个相互链接的实体 第条实体: /** * @var \StaticBundle\Entity\Revision * * @ORM\Id * @ORM\GeneratedValue(strategy="NONE") * @ORM\OneToOne(targetEntity="StaticBundle\Entity\Revision") * @ORM\JoinColumns({ * @ORM\JoinColumn(

我有一个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);
} 

假设系统能够对“节点”进行多个修订

例: 内容id:21可以有 修订编号:22(名称:b) 修订编号:23(名称:c)

但是当我想要创建一个新版本(id:24 name:d)时,新版本和现有版本都会用新名称更新

现在看起来是这样的:

内容id:21可以有

修订编号:22(名称:b)

修订编号:23(名称:d)

修订编号:24(名称:d)


我如何避免这种情况?这条原则是通过简单的冲洗完成的()

你能分享你的控制器代码来创建新的实体版本吗?我已经测试了更多的版本,看起来只有最后两个版本被修改了。那么Symfony似乎在插入新版本时更新了活动版本?