2011-12-15 4 views
0

Я буду сумасшедшим с сохранением controller action между двумя entities.Symfony2: Сохранить отношение Onetoone => ошибка SQLSTATE [23000] Нарушение ограничения целостности

У меня 2 сущности:

Первый удлиняется FOSUser

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

Я не понимаю, почему, у меня есть эта ошибка.

SQLSTATE[23000]: Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails (`namespace`.`t`, CONSTRAINT `FK_58C6694C54EE02A4` FOREIGN KEY (`user_id`) REFERENCES `User` (`id`)) 

Пожалуйста, помогите мне

Сэм

ответ

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. Целевой объект в моем случае был mappihg для себя - Файл. Вот почему внешние ключи не соответствовали инверсионной таблице.

плохо

//... 
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 и не забудьте ее обновить.