Php Symfony&;外键引用原则
我的外键有问题 日志 医务人员实体Php Symfony&;外键引用原则,php,doctrine-orm,foreign-keys,symfony,Php,Doctrine Orm,Foreign Keys,Symfony,我的外键有问题 日志 医务人员实体 /** * @ORM\OneToOne(targetEntity="Actors") * @ORM\JoinColumn(name="actorId", referencedColumnName="id") */ private $actorId; 行动者实体 /** * @var int * * @ORM\Column(name="id", type="integer")
/**
* @ORM\OneToOne(targetEntity="Actors")
* @ORM\JoinColumn(name="actorId", referencedColumnName="id")
*/
private $actorId;
行动者实体
/**
* @var int
*
* @ORM\Column(name="id", type="integer")
* @ORM\Id
* @ORM\GeneratedValue(strategy="AUTO")
*/
private $id;
医务人员控制器
/**
* Creates a new MedicalStaff entity.
*
* @Route("/new", name="admin_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request)
{
$medicalStaff = new MedicalStaff();
$actor = new Actors();
$form = $this->createForm('GuideBundle\Form\MedicalStaffType', $medicalStaff);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$actor->setRole(2);
$em = $this->getDoctrine()->getManager();
$em->persist($actor);
$em->flush();
$medicalStaff->setActorId($actor->getId()); //problem
$em->persist($medicalStaff); //is
$em->flush(); //here
//$this->generateLogin($medicalStaff->getActorId(), $medicalStaff->getEmail());
$flash = $this->get('braincrafted_bootstrap.flash');
$flash->success('Succesfully registered.');
}
return $this->render('medicalstaff/new.html.twig', array(
'medicalStaff' => $medicalStaff,
'form' => $form->createView(),
));
}
可能我使用FK引用不正确。我需要将MedicalStaff.actorId设置为与上面插入的Actor.id相同的值,您使用的是实际实体本身,而不是外键
$actorId
应该是$actor
,并且$medicalStaff->setActorId($actor->getId())代码>应该是$medicalStaff->setActor($actor)代码>。或者只是让它按原样工作$medicalStaff->setActorId($actor)代码>尽管我强烈建议修复naming@JimL但我不明白这个演员将如何存储在数据库中,我应该为演员设置什么类型?@JimL非常感谢!我试过$medicalStaff->setActorId($actor)代码>以前,但它不起作用,现在我明白了原因,一切都很好。是的,条令自动获取参与者ID(如果是FK)并为您处理。也就是说,您可能还可以了解为什么将名称更改为$actor
,将方法名称更改为setActor
,因为您自己并不是在处理IDs@JimL你能帮我解决另一个问题吗?现在我需要删除MedicalStaff对象及其引用的Actor(来自Actors实体)<代码>onDelete=“级联”)代码>删除等于MedicalStaff.id的actor.id;但是我需要删除一个actor,它存储在MedicalStaff.actor中。我怎么能做到这一点呢?在条令中,你使用的是实际实体本身,而不是外键$actorId
应该是$actor
,并且$medicalStaff->setActorId($actor->getId())代码>应该是$medicalStaff->setActor($actor)代码>。或者只是让它按原样工作$medicalStaff->setActorId($actor)代码>尽管我强烈建议修复naming@JimL但我不明白这个演员将如何存储在数据库中,我应该为演员设置什么类型?@JimL非常感谢!我试过$medicalStaff->setActorId($actor)代码>以前,但它不起作用,现在我明白了原因,一切都很好。是的,条令自动获取参与者ID(如果是FK)并为您处理。也就是说,您可能还可以了解为什么将名称更改为$actor
,将方法名称更改为setActor
,因为您自己并不是在处理IDs@JimL你能帮我解决另一个问题吗?现在我需要删除MedicalStaff对象及其引用的Actor(来自Actors实体)<代码>onDelete=“级联”)代码>删除等于MedicalStaff.id的actor.id;但是我需要删除一个actor,它存储在MedicalStaff.actor中。我该怎么做?
/**
* Creates a new MedicalStaff entity.
*
* @Route("/new", name="admin_new")
* @Method({"GET", "POST"})
*/
public function newAction(Request $request)
{
$medicalStaff = new MedicalStaff();
$actor = new Actors();
$form = $this->createForm('GuideBundle\Form\MedicalStaffType', $medicalStaff);
$form->handleRequest($request);
if ($form->isSubmitted() && $form->isValid()) {
$actor->setRole(2);
$em = $this->getDoctrine()->getManager();
$em->persist($actor);
$em->flush();
$medicalStaff->setActorId($actor->getId()); //problem
$em->persist($medicalStaff); //is
$em->flush(); //here
//$this->generateLogin($medicalStaff->getActorId(), $medicalStaff->getEmail());
$flash = $this->get('braincrafted_bootstrap.flash');
$flash->success('Succesfully registered.');
}
return $this->render('medicalstaff/new.html.twig', array(
'medicalStaff' => $medicalStaff,
'form' => $form->createView(),
));
}