Php Symfony flush和relation:列不能为NULL

Php Symfony flush和relation:列不能为NULL,php,symfony,doctrine,Php,Symfony,Doctrine,我有两个简单的实体:内阁和个人,具有“OneTONE”关系。但是当我添加Cabinet时,我有一个错误:列'personne\u id'不能为null 内阁实体: class Cabinet { /** * @ORM\OneToOne(targetEntity="LogicielBundle\Entity\Personne", cascade={"persist","remove"}) * @ORM\JoinColumn(nullable=false) */ private $perso

我有两个简单的实体:内阁个人,具有“OneTONE”关系。但是当我添加Cabinet时,我有一个错误:列'personne\u id'不能为null

内阁实体:

class Cabinet
{

/**
 * @ORM\OneToOne(targetEntity="LogicielBundle\Entity\Personne", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $personne;

public function setPersonne(\LogicielBundle\Entity\Personne $personne)
{
    $this->personne = $personne;

    return $this;
}

public function getPersonne()
{
    return $this->personne;
}
class Personne {

/**
 * @ORM\OneToOne(targetEntity="UtilisateurBundle\Entity\Cabinet", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $cabinet;

public function setCabinet(\UtilisateurBundle\Entity\Cabinet $cabinet)
{
    $this->cabinet = $cabinet;

    return $this;
}

public function getCabinet()
{
    return $this->cabinet;
}
    public function ajouterAction(Request $request)
{
    $personne = new Personne();
    $cabinet = new Cabinet();

    $cabinet->setPersonne($personne);
    $personne->setCabinet($cabinet);

    $form = $this->createForm('utilisateur_cabinet_form', $cabinet);
    $this->submit($form);
    if ($form->handleRequest($request)->isValid()) {
        $em = $this->getDoctrine()->getManager();
        dump($personne);
        dump($cabinet);
        $em->persist($cabinet);
        $em->flush();
        $request->getSession()->getFlashBag()->add('success', 'Le cabinet « '.$cabinet->getVersions()[0]->getLibelle().' » a été ajouté.');
        return $this->redirect($this->generateUrl('utilisateur_cabinet_index'));
    }
    return array(
        'form' => $form->createView(),
        'title' => 'Ajouter un nouveau cabinet'
    );
}
人员实体:

class Cabinet
{

/**
 * @ORM\OneToOne(targetEntity="LogicielBundle\Entity\Personne", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $personne;

public function setPersonne(\LogicielBundle\Entity\Personne $personne)
{
    $this->personne = $personne;

    return $this;
}

public function getPersonne()
{
    return $this->personne;
}
class Personne {

/**
 * @ORM\OneToOne(targetEntity="UtilisateurBundle\Entity\Cabinet", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $cabinet;

public function setCabinet(\UtilisateurBundle\Entity\Cabinet $cabinet)
{
    $this->cabinet = $cabinet;

    return $this;
}

public function getCabinet()
{
    return $this->cabinet;
}
    public function ajouterAction(Request $request)
{
    $personne = new Personne();
    $cabinet = new Cabinet();

    $cabinet->setPersonne($personne);
    $personne->setCabinet($cabinet);

    $form = $this->createForm('utilisateur_cabinet_form', $cabinet);
    $this->submit($form);
    if ($form->handleRequest($request)->isValid()) {
        $em = $this->getDoctrine()->getManager();
        dump($personne);
        dump($cabinet);
        $em->persist($cabinet);
        $em->flush();
        $request->getSession()->getFlashBag()->add('success', 'Le cabinet « '.$cabinet->getVersions()[0]->getLibelle().' » a été ajouté.');
        return $this->redirect($this->generateUrl('utilisateur_cabinet_index'));
    }
    return array(
        'form' => $form->createView(),
        'title' => 'Ajouter un nouveau cabinet'
    );
}
我的控制器非常简单:

class Cabinet
{

/**
 * @ORM\OneToOne(targetEntity="LogicielBundle\Entity\Personne", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $personne;

public function setPersonne(\LogicielBundle\Entity\Personne $personne)
{
    $this->personne = $personne;

    return $this;
}

public function getPersonne()
{
    return $this->personne;
}
class Personne {

/**
 * @ORM\OneToOne(targetEntity="UtilisateurBundle\Entity\Cabinet", cascade={"persist","remove"})
 * @ORM\JoinColumn(nullable=false)
 */
private $cabinet;

public function setCabinet(\UtilisateurBundle\Entity\Cabinet $cabinet)
{
    $this->cabinet = $cabinet;

    return $this;
}

public function getCabinet()
{
    return $this->cabinet;
}
    public function ajouterAction(Request $request)
{
    $personne = new Personne();
    $cabinet = new Cabinet();

    $cabinet->setPersonne($personne);
    $personne->setCabinet($cabinet);

    $form = $this->createForm('utilisateur_cabinet_form', $cabinet);
    $this->submit($form);
    if ($form->handleRequest($request)->isValid()) {
        $em = $this->getDoctrine()->getManager();
        dump($personne);
        dump($cabinet);
        $em->persist($cabinet);
        $em->flush();
        $request->getSession()->getFlashBag()->add('success', 'Le cabinet « '.$cabinet->getVersions()[0]->getLibelle().' » a été ajouté.');
        return $this->redirect($this->generateUrl('utilisateur_cabinet_index'));
    }
    return array(
        'form' => $form->createView(),
        'title' => 'Ajouter un nouveau cabinet'
    );
}

dump($cabinet)和dump($personne)为真;您能帮助我吗?

请确保同时允许Setter参数为null(此处仅允许null=true是不够的):


您应该显示实体的ID映射信息以查看发生了什么。您的
JoinColumn
定义似乎不完整,缺少名称和referencedColumnName。另外,如果是双向关系,你应该使用inversedBy和mappedBy指出谁是拥有者,谁是反面。谢谢@LBA,这是正确的。但是,如果我不想要空数据,为什么要使用空数据?谢谢:)哦,对不起,我可能误解了您的意思-所以实际上,对于关联双方,列不能为空?请确保设置关联的拥有方和反向:谢谢,但如果我不想要双向关系?但您的第一个回答是work true…无论如何,您都会得到一个双向关系,但对于一对一:OneToOne关联的拥有方是表中包含外键的实体。您需要在注释中定义它。