Symfony2:保存Onetoone关系=>错误SQLSTATE [23000]完整性约束违规

时间:2011-12-15 15:03:01

标签: symfony fosuserbundle

我会在<{1}}之间保存controller action 疯狂

我有两个实体:

第一个是扩展FOSUser

entities

第二个是:

class User extends BaseUser
{
    /**
     * @var integer $id
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    protected $id;    

    /**
     * @var Namespace\LoginBundle\Entity\T $t
     *
     * @ORM\OneToOne(targetEntity="Namespace\LoginBundle\Entity\T", cascade={"persist"})
     */
    private $t;
}

当我登录我的应用程序并且class T { /** * @var integer $id * * @ORM\Column(name="id", type="integer") * @ORM\Id * @ORM\GeneratedValue(strategy="AUTO") */ protected $id; /** * @ORM\OneToOne(targetEntity="Namespace\LoginBundle\Entity\User", cascade={"persist"}) */ private $user; } 仍然保存到我的数据库中时,我有一行User字段T

我的控制器中有这种方法:

null

我不明白为什么,我有这个错误。

public function createAction()
    {       
        $entity  = new T();        

        // user
        $user = $this->get('security.context')->getToken()->getUser();
        $entity->setUser($user);
        $user->setT($entity);

        $request = $this->getRequest();
        $form    = $this->createForm(new TType(), $entity);        
        $form->bindRequest($request);

        if ($form->isValid()) {
            $em = $this->getDoctrine()->getEntityManager();

            $em->persist($entity);                
            $em->persist($entity->getUser());
            $em->persist($user->getT());

            $em->flush();                               

            return $this->redirect($this->generateUrl('t_show', array('id' => $entity->getId())));
        }

        return $this->render('NamespaceXXXXBundle:T:new.html.twig', array(
            'entity' => $entity,
            'form'   => $form->createView()                
        ));
    }

请帮帮我

萨姆

1 个答案:

答案 0 :(得分:0)

我也遇到了这个异常的问题

request.CRITICAL: PDOException: SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`mybundle`.`File`, CONSTRAINT `FK_70684D4DA76ED395` FOREIGN KEY (`user_id`) REFERENCES `JEP_File` (`id`)) (uncaught exception)

问题在于映射定义。我在File实体中使用了错误的映射。在我的案例中,目标实体是自己的文件 - 文件。这就是为什么外键没有匹配反转表。

<强>坏

//...
class File{

   @ORM\ManyToOne(targetEntity="File",inversedBy="files")
//...

不可

//...
class File{
/**
 * @ORM\ManyToOne(targetEntity="User",inversedBy="files")
 * @ORM\JoinColumn(name="owner_id",referencedColumnName="id")
 */
protected $owner;
//...

希望,这有帮助。 尝试查看dbs架构,不要忘记更新它