Symfony 3 ORM 在持久化后创建新的实体记录

Posted

技术标签:

【中文标题】Symfony 3 ORM 在持久化后创建新的实体记录【英文标题】:Symfony 3 ORM creates new entity record after persist 【发布时间】:2018-03-17 11:54:22 【问题描述】:

我正在尝试在团队实体中创建一个新记录,现有用户作为用户实体的所有者,但在使用持久化之后,它会创建一个新用户,而不是将其附加到记录中。

    public function createTeam(Request $request)
    
        $teamForm = $this->createForm(TeamType::class);

        $teamForm->handleRequest($request);
        if ($teamForm->isSubmitted() && $teamForm->isValid()) 

            $user = $this->getUser();
            $team = $teamForm->getData();

            $team->setCreatedAt(new \DateTime())
                 ->setCreator($user);

            $this->em->persist($team);
    //dd($team);
            $this->em->flush();

        

ORM:

        /**
     * @ORM\ManyToOne(targetEntity="AppBundle\Entity\SteamUser", cascade="persist")
     * @ORM\JoinColumn(name="steam_user_id", referencedColumnName="id", onDelete="SET NULL")
     */
    private $creator;

转储记录如下:

    TeamController.php on line 52:
Team #591 ▼
  -id: null
  -creator: SteamUser #238 ▼
    -id: 1
    -roles: array:1 [▶]
    -nickName: "steamuser"
    -userName: "76561192288153971"
    -password: "LrC8fFLuIdPqAiDHDATiheRaIBk="
    -avatar: "https://steamcdn-a.akamaihd.net/steamcommunity/public/images/avatars/9e/9e8567cc32383f28df41da7fbca7e8afd47f8516.jpg"
    -teams: PersistentCollection #290 ▶
  
  -name: "dasdasdasdas"
  -logo: null
  -teamType: 2
  -createdAt: DateTime #594 ▶
  -roster: ArrayCollection #571 ▶

您可以在persist之前看到用户具有ID并被识别,但在persist之后它会在数据库中创建一个新用户。

请多多指教。

【问题讨论】:

在这个持久化或请求之后是否触发了任何事件? 它在数据库中创建具有相同 id 的新用户? 【参考方案1】:

您需要从实体中获取用户对象,以便学说可以将您的团队实体与该用户相关联,现在您正在从安全上下文中获取用户对象,这不是学说对象,这就是创建新用户的原因。

这应该改成如下$user = $this->getUser();

$user = $em->getRepository('AppBundle\Entity\SteamUser')
           ->find($this->getUser()->getId());

【讨论】:

以上是关于Symfony 3 ORM 在持久化后创建新的实体记录的主要内容,如果未能解决你的问题,请参考以下文章

Symfony 3 Doctrine MySQL - 使用 @ORM 注释生成实体

@ORM\Id 不会为 symfony 中的实体创建标识符

如何在 Doctrine (Symfony 3) 实体中设置列位置

更改后,Symfony 实体不会在数据库中更新

在 Symfony 上生成迁移时忽略实体

Symfony 2 实体连接或学说查询连接