Php Symfony2-manytomy-Can';不要只更新拥有方

Php Symfony2-manytomy-Can';不要只更新拥有方,php,symfony,doctrine-orm,many-to-many,Php,Symfony,Doctrine Orm,Many To Many,我在用户表和角色表之间有很多关系。用户表是拥有方。我的问题是,当我将数据持久化到用户表中时,“User_role”表(即关系的助手表)不会更新 AccountController.php: $user = $registration->getUser(); // all the user data works $em->persist($user); $em->flush(); User.php: /** * @ORM\ManyToMany(targetEntit

我在用户表和角色表之间有很多关系。用户表是拥有方。我的问题是,当我将数据持久化到用户表中时,“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。但是,对于这个角色,我还必须持久化它(否则就是致命的错误),如果我持久化了,那么它将是角色表中的一个重复条目


基本上我的问题很简单:在更新用户角色表的同时,如何在数据库中保存新用户,而不添加/复制新角色?


任何帮助都将不胜感激。

好了,问题已经解决了

基本上,它一直试图复制Role表中的条目的原因是因为我创建了一个新实体,并试图将其添加为角色。下面是错误代码:

$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();

添加此现有角色后,助手表将相应更新

你能试试
***@ManyToMany(targetEntity=“User”,mappedBy=“roles”)*@JoinTable(name=“User\u role”,*joinColumns={@JoinColumn(name=“role\u id”,referencedColumnName=“id”)},*inverseJoinColumns={@JoinColumn(name=“User\u id”,referencedColumnName=“id”)}*/
在条令文件中没有ORM。我正在使用:使用条令\ORM\Mapping作为ORM;如果你有行的键,你可以通过使用
$role=$em->getReference('nameyurbundle:role',$id)进行选择$用户->添加角色($role)
你的答案今天救了我的命,我的朋友@Marlyyy。。。。Thaaaaankssss!!!!!