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 注释生成实体