Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 原则ODM:使用多对多删除父对象中的引用_Php_Mongodb_Symfony_Doctrine Orm_Doctrine Odm - Fatal编程技术网

Php 原则ODM:使用多对多删除父对象中的引用

Php 原则ODM:使用多对多删除父对象中的引用,php,mongodb,symfony,doctrine-orm,doctrine-odm,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") */ privat

因此,我有以下文件:

/*
 * @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;

因此,当我执行更新角色的修补程序请求时,我希望设置更新角色拥有的用户列表。我发现它完全发生了,但是当我转到数据库时,我没有看到添加到角色的用户列表中的用户中的角色,或者我确实看到了从角色的用户列表中删除的角色。 那么,这是一种正常的行为,我必须自己删除这些引用,还是我做错了什么

更新:

总是需要写问题来理解我到底想要什么

对于编辑,我使用symfony表单

主要的问题是:我们能用关系倒转的东西来引用吗?
我希望有机会编辑用户和编辑角色,他们可以删除或添加彼此不使用的ID。

目前不可以。一个模型必须拥有一方或另一方的关系

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

/**
 * @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;