Symfony3更新了一点

时间:2017-01-09 08:38:31

标签: 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(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();

完成的

0 个答案:

没有答案