Symfony 3 ORM在创建新实体记录后创建新记录
问题描述:
我试图在Team实体中创建新记录,现有用户作为用户实体的所有者,但使用持久记录后创建新用户而不是附加记录。Symfony 3 ORM在创建新实体记录后创建新记录
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 ▶}
}
,你可以看到用户坚持之前有ID,并进行确认,但坚持后它会创建一个新的用户在数据库中。
请给出一些很好的建议。
答
您需要从实体获取用户对象,以便教义可以将您的团队实体与此用户关联,现在您从中获取用户对象。我猜安全上下文不是作为新用户创建原因的教义对象。
本应为如下
$user = $this->getUser();
$user = $em->getRepository('AppBundle\Entity\SteamUser')
->find($this->getUser()->getId());
是否有在这之后持续或要求解雇任何事件? – svgrafov
它使用相同的ID在数据库中创建新用户? – ArtOsi