Symfony2:保存Onetoone关系=>错误SQLSTATE [23000]完整性约束冲突
问题描述:
我将要疯狂保存controller action
beetween两个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`))
请帮我
山姆
答
我也有问题,与此异常
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 - 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架构,不要忘记更新它