我有自引用的一对多关系(我是根据文档:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/association-mapping.html#one-对许多自参考)
现在我想将新元素刷新到Entity,但如何使用新元素的ID将其放在引用位置?
我尝试使用:
$newProject->setSubprojectId($newProject);
和:
$newProject->setSubprojectId($newProject->getId());
但我认为在冲洗之前不可能得到物体的ID,我是对的?
我的代码看起来像:
/**
* @Route("/project/manage", name="project_edit");
*/
public function registerAction(Request $request)
{
$user = $this->get('security.token_storage')->getToken()->getUser();
$newProject = new Project();
$newProject->setIsActive(1);
$newProject->setOwner($user);
$newProject->setCreateDate( new 'DateTime() );
$newProject->setSubprojectId($newProject);
$formProject = $this->createForm(AddProject::class, $newProject);
$formProject->handleRequest($request);
if($formProject->isSubmitted() && $formProject->isValid()){
$em = $this->getDoctrine()->getManager();
$em->persist($newProject);
$em->flush();
return $this->render('xxx/projectEdit.html.twig', array(
'form' => $formProject->createView(),
));
}
return $this->render('xxx/projectEdit.html.twig', array(
'form' => $formProject->createView(),
));
}
编辑
我找到了不同的解决方案,但问题仍然有效——是否可以在刷新之前获取此id,或者同时刷新两列的id?
您可以尝试设置级联持久化,但为什么不直接这样做呢:
$em = $this->getDoctrine()->getManager();
$em->persist($newProject);
$em->flush();
$newProject->setSubProject($newProject); // *why* do you want to do this?
$em->persist($newProject);
$em->flush();
你不需要直接设置id。您应该能够通过在对象上使用setter来实现这一点,并且原则应该为您处理id。