我有一個ControllerAction允許用戶加入用戶組。SecurityContext用戶不是由EntityManager管理,「找到了新的實體」
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');
}
$這 - >的getUser使用Symfony2的基本控制器,其被基本上得到從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異常 學說\ ORM \ ORMInvalidArgumentException :「通過關係'Strego \ UserBundle \ Entity \ UserGroup#users' 發現一個新實體 未被配置爲級聯實體的持久操作:mof。 要解決此問題:顯式調用EntityManager#persist()在 這個未知實體或配置級聯在 的映射中堅持這個關聯,例如@ManyToOne(..,cascade = {「persist」})。「
我已經研究了很多關於這個問題,但所有可能的原因(不合並,em明確,使用多個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();
}
}
導致再次插入用戶,而不是插入關係。
我更新了我的問題,我的地圖,我映射多對多 – m0c
我更新我的回答,希望它有助於 –
那做了詭計,非常感謝。我從幾個小時開始正在調試,並且變得瘋狂。 – m0c