簡體   English   中英

外鍵約束失敗,因為insert語句尚未提交(MySQL)

[英]Foreign key constraint fails because insert statement not yet committed (MySQL)

我有一個使用Doctrine 2的PHP腳本,它主要執行以下操作:

$entityManager->transactional(function($em) {
    $foreignObject = new DoctrineEntities\ForeignTable();
    $em->persist($foreignObject);
    $em->flush();
    $aObject = new DoctrineEntities\A();
    $aObject->ForeignID = $foreignObject->ID;
    $em->persist($aObject);
    $em->flush();
});

我收到了完整性約束違規:

我的猜測是在提交之前檢查約束,並且它不會檢查我所做的尚未提交的插入是否可以使約束通過而不是失敗。 但我確實希望這兩個插入語句包含在同一個事務中。 那我該怎么辦?

UPDATE

我移動$em->persist($aObject); $em->flush(); $em->persist($aObject); $em->flush(); 退出交易,我仍然得到同樣的錯誤。 顯然,我的猜測是錯誤的...但后來我真的不知道是什么導致錯誤。


SQL上下文

A.

CREATE TABLE `A` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `ForeignID` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  KEY `A_ForeignID` (`ForeignID`),
  CONSTRAINT `A_ForeignID` FOREIGN KEY (`ForeignID`) REFERENCES `ForeignTable` (`ID`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

ForeignTable

CREATE TABLE `ForeignTable` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci

我建議閱讀有關MySQL數據完整性和FK ,然后是Doctrine關聯 ,MySQL會檢查InnodDB表的數據完整性。 你做的不對,它應該是

$entityManager->transactional(function($em) {
    $foreignObject = new DoctrineEntities\ForeignTable();
    $em->persist($foreignObject);

    $aObject = new DoctrineEntities\A();
    $aObject->setForeign($foreignObject);
    $em->persist($aObject);

    $em->flush();
});

我解決了這個問題。 這是與我的問題完全無關的其他地方..我會接受getme的答案,因為接受這個答案真的不會幫助其他任何人......

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM