Symfony2 - 具有一对一关系的Doctrine Save实体

时间:2011-12-01 15:46:28

标签: php symfony doctrine-orm mysql-error-1064

我想保存我创建的表单,但是我有错误。

我有3个实体:

class T {
    /**
     * @ORM\OneToOne(targetEntity="MyNameSpace\ProfileBundle\Entity\Person", cascade={"persist"})

     */
    private $information;
}

class Person {
    /**
     * @ORM\OneToOne(targetEntity="MyNameSpace\MediaBundle\Entity\Document", cascade={"persist"}))
     */
    private $photo_profile;
}

class Document
{
    private $file;
}

当我使用此代码保存“T”类时:

public function createAction()
{
        $entity     = new T();                        
        $request = $this->getRequest();
        $form    = $this->createForm(new TType(), $entity);        
        $form->bindRequest($request);

        if ($form->isValid()) 
        {
            $em = $this->getDoctrine()->getEntityManager();
            $em->persist($entity);            
            $em->flush();
        }
} 

我有这个错误:

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(namespaceperson,CONSTRAINT FK_3370D440809EFCB0 FOREIGN KEY({{ 1}})参考photo_profile_idDocument))

任何帮助都会很酷

感谢所有


这里是我的代码:

id

我有这个错误:

  

SQLSTATE [23000]:完整性约束违规:1452无法添加或更新子行:外键约束失败(/** * Creates a new Tutor entity. */ public function createAction() { $entity = new T(); $person = new Person(); $document = new Document(); $person->setPhoto($document); $entity->setInformation($person); $request = $this->getRequest(); $form = $this->createForm(new TType(), $entity); $form->bindRequest($request); if ($form->isValid()) { $em = $this->getDoctrine()->getEntityManager(); $em->persist($entity->getInformation()->getPhoto()); $em->persist($entity->getInformation()); $em->flush(); $em->persist($entity); $em->flush(); return $this->redirect($this->generateUrl('Index')); } db,CONSTRAINT T FOREIGN KEY({{ 1}})参考FK_58C6694C2EF03101information_id))

任何帮助都会很酷

由于

3 个答案:

答案 0 :(得分:2)

我也遇到了这个问题并且级联没有帮助所以我最终只使用了oneToMany,manyToOne关系。

我的替代解决方案是不在生成的SQL中应用外键约束但是会删除我的--force能力(并强迫我编写自己的脚本以忽略FK约束),因此oneToMany解决方案是对我来说更优雅。

答案 1 :(得分:0)

您正在尝试保存Person,但未将与Document(必须命名为photo_profile)的关系指定为可为空,因此出现此错误。

答案 2 :(得分:0)

我对ManyToOne关系有同样的问题;我只是:

  1. 坚持所有者实体
  2. flush
  3. 创建逆并绑定它
  4. 再次坚持并冲洗 一切都正常了!
  5. 嗯,我无法解释,但我只是分享我的经验,也许它会服务!