Symfony2 — ManyToMany — не может обновить только собственную сторону

У меня есть отношения ManyToMany между таблицей пользователя и таблицей ролей. Пользовательская таблица является владельцем. Моя проблема заключается в том, что когда я сохраняю данные в таблице User, таблица user_role (которая является вспомогательной таблицей отношений) не обновляется.

AccountController.php:

$user = $registration->getUser(); // all the user data works

$em->persist($user);
$em->flush();

User.php:

/**
* @ORM\ManyToMany(targetEntity="Role", inversedBy="users")
* @ORM\JoinTable(name="user_role",
*      joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
*      inverseJoinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")}
* )
*
*/

private $roles;

public function __construct()
{
$this->roles = new ArrayCollection();
}

// trying to assign this role by default
public function getRoles()
{
return array('ROLE_ADMIN');
}

public function addRole(Role $role) {
$this->roles[] = $role;
$role->addUser($this);

return $this;
}

Role.php:

/**
* @ORM\ManyToMany(targetEntity="User", mappedBy="roles")
* @ORM\JoinTable(name="user_role",
*      joinColumns={@ORM\JoinColumn(name="role_id", referencedColumnName="id")},
*      inverseJoinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")}
* )
*/
private $users;

public function __construct()
{
$this->users = new ArrayCollection();
}

public function getRole()
{
return $this->role;
}

public function setRole($role)
{
$this->role = $role;
}public function addUser(User $users)
{
$this->users[] = $users;

return $this;
}

public function getUsers()
{
return $this->users->toArray();
}

Я понимаю, что даже не использую addRole в контроллере. Но для этого я должен был бы также сохранить роль (иначе фатальная ошибка), и если я это сделаю, то это будет дублирующая запись в таблице ролей.


В основном мой вопрос вкратце: как сохранить нового пользователя в базе данных при обновлении таблицы user_role без добавления / дублирования новой роли?

Любая помощь могла бы быть полезна.

1

Решение

Хорошо, это было решено!

По сути, причина, по которой он пытался дублировать запись в таблице ролей, заключается в том, что я создал новую сущность и попытался добавить ее в качестве роли. Вот плохой код:

$role = new Role();
$role->setName('admin');
$role->setRole('ROLE_ADMIN');
$user->addRole($role);

И вот что я должен был сделать: получить существующую роль, которую я хотел назначить из базы данных:

$role = $em->getRepository('NameYourBundle:Role')->findOneBy(array('name' => 'admin'));
$user->addRole($role);
$em->persist($user); // persisting only the user.
$em->flush();

После добавления этой существующей роли таблица помощников будет обновлена ​​соответствующим образом!

2

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

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

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