【发布时间】:2014-06-13 08:01:09
【问题描述】:
我有一个允许用户加入用户组的 ControllerAction。
UserGroup 是通过 Paramconverter 获取的,用户始终是当前登录的用户。
/*
* @ParamConverter("code", class="StregoUserBundle:UserGroup", options={"mapping": {"code": "code"}})
* @param \Strego\UserBundle\Entity\UserGroup $code UserGroup Code
*/
public function joinGroupAction($code){
$userManager = $this->get('strego_user.user_manager');
$userManager->joinGroup($code, $this->getUser());
return new Message('Erfolgreich der Gruppe beigetreten', 'success');
}
$this->getUser 使用的是 Symfony2 Base Controller,它基本上是从 securityContext 中获取用户。
我的 joinGroup 如下所示:
public function joinGroup(UserGroup $userGroup, User $user){
if (!$userGroup->getUsers()->contains($user)) {
$userGroup->addUser($user);
$this->em->merge($user);
$this->em->persist($userGroup);
$this->dispatcher->dispatch(
UserEvents::USER_USERGROUP_JOIN,
new UserGroupUserEvent($userGroup, $user)
);
$this->em->flush();
}
}
如您所见,我已经尝试合并用户,但我仍然得到 以下错误消息:未捕获的 PHP 异常 Doctrine\ORM\ORMInvalidArgumentException:“找到了一个新实体 通过关系'Strego\UserBundle\Entity\UserGroup#users' 未配置为实体级联持久操作:mof。 要解决这个问题:要么显式调用 EntityManager#persist() 这个未知实体或配置级联将这个关联保持在 映射例如 @ManyToOne(..,cascade={"persist"})。"
我已经对这个问题进行了很多研究,但是所有可能的原因(不合并,em clear,使用多个em)都不适用于这种情况。
我的配置如下所示:
class UserGroup extends BaseGroup {
/**
* @var Collection users
* @ORM\ManyToMany(targetEntity="User", inversedBy="userGroups" )
* @ORM\JoinTable(name="user_user_usergroup")
* @Serialize\Expose()
* @Serialize\MaxDepth(2)
* @Serialize\Groups({"usergroup"})
*
*/
protected $users;
}
class User extends BaseUser {
/**
* @var Collection userGroups
*
* @ORM\ManyToMany(targetEntity="UserGroup", mappedBy="users")
* @ORM\JoinTable(name="user_user_usergroup",
* joinColumns={@ORM\JoinColumn(name="user_id", referencedColumnName="id")},
* inverseJoinColumns={@ORM\JoinColumn(name="group_id", referencedColumnName="id")}
* )
*/
private $userGroups;
}
更新 我试图改变持久性,因为“用户”被定义为拥有方:
public function joinGroup(UserGroup $userGroup, User $user){
if (!$userGroup->getUsers()->contains($user)) {
$user->addUserGroup($userGroup);
$this->em->persist($user);
$this->dispatcher->dispatch(
UserEvents::USER_USERGROUP_JOIN,
new UserGroupUserEvent($userGroup, $user)
);
$this->em->flush();
}
}
这会导致再次插入用户,而不是插入关系。
【问题讨论】:
标签: symfony doctrine-orm