我有2个实体
并且它们是在oneToOne双向
中设置的 User.orm.yml
oneToOne:
jobSeekerProfile:
targetEntity: AppBundle\Entity\JobSeekerProfile
mappedBy: jobSeekerUser
cascade: ["persist"]
JobSeekerProfile.orm.yml
oneToOne:
jobSeekerUser:
targetEntity: AppBundle\Entity\User
inversedBy: jobSeekerProfile
情景1
现在在我的控制器中,我试图保存关系的反面,数据被保存但不是关系ID。
if ($form->isValid()) {
$user = $form->getData();
// encode the password manually
$encodedPassword = $this->get('security.password_encoder')->encodePassword($user, $form->get('plainPassword')->getData());
$user->setPassword($encodedPassword);
$em = $this->getDoctrine()->getManager();
$em->persist($user);
$em->flush();
$this->get('session')->getFlashBag()->add(
'success',
$this->get('translator')->trans('success_registration')
);
return $this->redirect($this->generateUrl('login'));
}
场景2
如果我将控制器更改为以下关系id保存。但是后来有2条记录被添加到表1中,其中一条关系为id,另一条没有。
if ($form->isValid()) {
$user = $form->getData();
// encode the password manually
$encodedPassword = $this->get('security.password_encoder')->encodePassword($user, $form->get('plainPassword')->getData());
$user->setPassword($encodedPassword);
$em = $this->getDoctrine()->getManager();
$JS = new JobSeekerProfile();
$JS->setFirstName($form->get('jobSeekerProfile')['firstName']->getData());
$JS->setLastName($form->get('jobSeekerProfile')['lastName']->getData());
$JS->setJobSeekerUser($user);
$em->persist($user);
$em->persist($JS);
$em->flush();
$this->get('session')->getFlashBag()->add(
'success',
$this->get('translator')->trans('success_registration')
);
return $this->redirect($this->generateUrl('login'));
}
我的问题是,不应该使用scenario 1
来保存关系ID,因为其他数据已经保存,所以最后是否会保存关系ID以保存?
我的问题2是,如果假设上述问题的答案为否,那么scenario 2
是正确的方法,它是否能完成这项工作,但这是一种做事的方式吗?
答案 0 :(得分:1)
我的物理能力告诉我,job_seeker_profile表中的user_id列为空。这是对的吗?
如果是这样,那么最可能的问题是您没有设置User和JobSeekerProfile之间的关系。
class User {
public function setJobSeekerProfile($profile) {
$this->jobSeekerProfile = $profile;
$profile->setUser($this); // THIS is what you are missing