Doctrine ODM:删除多对多父对象中的引用
Doctrine ODM: delete reference in parent object with many to many
所以我有下一个文件:
/*
* @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;
因此,当我执行更新角色的补丁请求时,我想设置更新角色拥有的用户列表。我完全发生了,但是当我进入数据库时,我没有看到添加到角色用户列表中的用户角色,或者我看到查看我从角色的用户列表中删除的角色。
这是正常行为吗,我必须自己删除这些引用 或 我做错了什么?
更新:
总是需要写问题来了解我真正想要的是什么...
为了编辑,我使用 symfony 表单。
主要问题是:我们可以参考类似 inversedBy 关系的东西吗?
我希望有机会编辑用户和编辑角色,并且他们彼此删除或添加他们(不)使用的 ID。
目前不可以。一个模型必须拥有一侧或另一侧的关系。
如果您让 User
模型拥有与 Role
的关系,您可以在编辑用户时为用户设置角色。 Role 模型上的 users
属性 可以是反向引用,以显示哪些用户分配了 Role,但您必须使用 owning 引用修改模型才能将更多用户添加到该角色。
所以我有下一个文件:
/*
* @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;
因此,当我执行更新角色的补丁请求时,我想设置更新角色拥有的用户列表。我完全发生了,但是当我进入数据库时,我没有看到添加到角色用户列表中的用户角色,或者我看到查看我从角色的用户列表中删除的角色。 这是正常行为吗,我必须自己删除这些引用 或 我做错了什么?
更新:
总是需要写问题来了解我真正想要的是什么...
为了编辑,我使用 symfony 表单。
主要问题是:我们可以参考类似 inversedBy 关系的东西吗? 我希望有机会编辑用户和编辑角色,并且他们彼此删除或添加他们(不)使用的 ID。
目前不可以。一个模型必须拥有一侧或另一侧的关系。
如果您让 User
模型拥有与 Role
的关系,您可以在编辑用户时为用户设置角色。 Role 模型上的 users
属性 可以是反向引用,以显示哪些用户分配了 Role,但您必须使用 owning 引用修改模型才能将更多用户添加到该角色。