【问题标题】:Symfony2 - ManyToMany - Can't update owning side onlySymfony2 - ManyToMany - 不能只更新拥有方
【发布时间】:2014-09-19 00:13:10
【问题描述】:

我在用户表和角色表之间存在多对多关系。用户表是拥有方。我的问题是,当我将数据持久化到 User 表中时,“user_role”表(即关系的帮助表)不会更新。

AccountController.php:

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

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

用户.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;
    }

角色.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 表的同时在数据库中保存新用户,而不添加/复制新角色?

任何帮助将不胜感激。

【问题讨论】:

  • 你可以试试** * @ManyToMany(targetEntity="User", mappedBy="roles") * @JoinTable(name="user_role", * joinColumns={@JoinColumn(name="role_id", referencedColumnName="id")}, * inverseJoinColumns={@JoinColumn(name="user_id", referencedColumnName="id")} * ) */ 没有ORM 作为学说的文档。 doctrine-orm.readthedocs.org/en/latest/reference/…
  • 我正在使用:使用 Doctrine\ORM\Mapping 作为 ORM;所以没有 ORM 是行不通的。

标签: php symfony doctrine-orm many-to-many


【解决方案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();

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

【讨论】:

  • 如果你有行的键,你可以使用$role = $em->getReference('NameYourBundle:Role', $id); $user->addRole($role)备用选择
  • 你的回答今天只是救了我的命,我的朋友@Marlyyy .... THAAAAAAANKSSSSS !!!!!!
猜你喜欢
  • 1970-01-01
  • 2013-05-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-04-10
  • 2023-04-11
  • 1970-01-01
相关资源
最近更新 更多