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(),
        ));
    }