我试图在一个视图中管理与属性的manyToMany关系以进行删除/更新/添加。
这是我的关系:用户可以说一些级别的语言。因此,有一个表,用户,Langages和第三个用于管理与关卡的关系。
这是我的控制者:
public function gererLangueAction(Request $request, User $user){
$form = $this->createForm(new ajouterLangueFormType, $user);
if ($request->getMethod() == 'POST') {
$form->bind($request);
if ($form->isValid()) {
$em = $this->getDoctrine()->getManager();
if(!empty($request->request->get("intranet_rh_gererlangue")['userLangues']))
foreach($request->request->get("intranet_rh_gererlangue")['userLangues'] as $langue)
{
$l = $em->getRepository('IntranetRhBundle:Langue')->findOneById($langue['langue']);
$userLangues = new UserLangue();
$userLangues->setUser($user);
$userLangues->setLangue($l);
$userLangues->setNiveau($langue['niveau']);
$user->addUserLangue($userLangues);
$em->persist($userLangues);
}
$em->flush();
$this->get('session')->getFlashBag()->add('success', "Les langues de ". $user->getNom() ." ". $user->getPrenom() . " ont été modifiées avec succès !");
return $this->redirect($this->generateUrl('intranet_rh_homepage'));
}else
$this->get('session')->getFlashBag()->add('danger', "Erreur de formulaire !");
}
return $this->render('IntranetRhBundle:User:gererLangue.html.twig',array('user' => $user, 'form' => $form->createView()));
}
我的观点还可以,我的JS允许我添加和删除,如果已经存在,我可以更新和删除一些语言。
但是当我想添加一种语言时,我有这样的信息:
" Intranet \ RhBundle \ Entity \ UserLangue类型的实体缺少字段' user'的分配ID。此实体的标识符生成策略要求在调用EntityManager#persist()之前填充ID字段。如果您想要自动生成标识符,则需要相应地调整元数据映射。 "
但是我不明白为什么因为我对每个班级的学说注释:
for UserLangue:
/**
* @ORM\Id
* @ORM\ManyToOne(targetEntity="Intranet\UserBundle\Entity\User", inversedBy="userLangues")
* @ORM\JoinColumn(name="user_id", referencedColumnName="id", nullable=false)
*/
private $user;
对于用户:
/**
* @ORM\OneToMany(targetEntity="Intranet\RhBundle\Entity\UserLangue", mappedBy="user", cascade={"persist", "remove"}, orphanRemoval=true)
**/
private $userLangues;
使用添加和删除方法。 我从3天开始研究这个bug,但是没有人犯过类似的错误......
答案 0 :(得分:1)
你可以尝试在注释中添加@ORM\GeneratedValue(strategy="AUTO")
,但是作为Id的关系不是一个非常好的想法,我不认为它甚至可以工作。尝试添加$ id参数并将关系设置为不同的参数。