Symfony 3 ORM создает новую запись сущности после сохранения

я пытаюсь создать новую запись в сущности Team с существующим пользователем в качестве владельца от Entity User, но после использования persist он создает нового пользователя, а не присоединяет его к записи.

    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 ▶}
}

Как вы можете видеть, пользователь до того, как персистент имеет идентификатор и распознается, но после этого он создает нового пользователя в базе данных.

Пожалуйста, дайте несколько хороших советов.

1

Решение

Вам нужно получить объект пользователя из сущности, чтобы доктрина могла связать сущность вашей команды с этим пользователем, прямо сейчас вы получаете объект пользователя из, я думаю, контекста безопасности, который не является объектом доктрины, поэтому создается новый пользователь.

это должно быть изменено, как показано ниже $user = $this->getUser();

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

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]