Doctrine ODM:在父对象中删除多对多的引用

时间:2017-03-31 09:38:19

标签: php mongodb symfony doctrine-orm doctrine-odm

所以我有下一份文件:

/*
 * @ODM\Document(collection="role", repositoryClass="AppBundle\Document\Repository\RoleRepository")
 */
class Role implements RoleInterface
{
    /**
     * @var integer $id
     *
     * @ODM\Id(strategy="INCREMENT")
     */
    private $id;

    /**
     * @var string $name
     *
     * @ODM\Field(type="string")
     */
    private $name;

    /**
     * @var ArrayCollection $users
     *
     * @ODM\ReferenceMany(targetDocument="User", mappedBy="roles", cascade={"all"})
     *
     * @JMS\Accessor(getter="getUsersToJson")
     * @JMS\Expose
     * @JMS\Type("array<integer>")
     */
    private $users;

/**
 * @ODM\Document(collection="user", repositoryClass="AppBundle\Document\Repository\UserRepository")
 */
class User implements AdvancedUserInterface
{

    /**
     * @var integer $id
     *
     * @ODM\Id(strategy="INCREMENT")
     * @ODM\Index(unique=true)
     *
     * @JMS\Expose
     * @JMS\Type("integer")
     */
    private $id;

    /**
     * @var ArrayCollection $roles
     *
     * @ODM\ReferenceMany(targetDocument="Role", inversedBy="users", cascade={"persist", "refresh"})
     *
     * @JMS\Expose
     * @JMS\Type("ArrayCollection<AppBundle\Document\Role>")
     */
    private $roles;

因此,当我执行更新角色的补丁请求时,我想设置更新角色所具有的用户列表。我完全出现了,但是当我进入数据库时​​,我看到用户中添加到角色的用户列表中的角色,或者我看到我从角色的用户列表中删除的角色。 这是一个正常的行为,我必须自己删除这些引用 OR 我做错了什么?

更新

始终需要写下问题以了解我真正想要的是什么......

编辑我使用symfony表格。

主要问题是:我们可以参考 inversedBy 关系吗? 我希望有机会编辑用户和编辑角色,他们会相互删除或添加ID,这些ID是他们(不)使用的。

1 个答案:

答案 0 :(得分:1)

目前没有,你不能。一个模型必须拥有一方或另一方的关系。

如果User模型拥有与Role的关系,则可以在编辑时为用户设置角色。 Role模型上的users属性可以是反向引用,用于显示用户具有角色分配的内容,但您必须使用拥有引用修改模型,以向角色添加更多用户。