加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

php – 外键约束失败,因为insert语句尚未提交(MySQL)

发布时间:2020-12-13 22:46:00 所属栏目:PHP教程 来源:网络整理
导读:我有一个使用 Doctrine 2的PHP脚本,它主要执行以下操作: $entityManager-transactional(function($em) { $foreignObject = new DoctrineEntitiesForeignTable(); $em-persist($foreignObject); $em-flush(); $aObject = new DoctrineEntitiesA(); $aObjec
我有一个使用 Doctrine 2的PHP脚本,它主要执行以下操作:

$entityManager->transactional(function($em) {
    $foreignObject = new DoctrineEntitiesForeignTable();
    $em->persist($foreignObject);
    $em->flush();
    $aObject = new DoctrineEntitiesA();
    $aObject->ForeignID = $foreignObject->ID;
    $em->persist($aObject);
    $em->flush();
});

我收到了完整性约束违规:

a foreign key constraint fails (dbName.A,CONSTRAINT A_ForeignID FOREIGN KEY (ForeignID) REFERENCES ForeignTable (ID) ON DELETE NO ACTION ON UPDATE NO ACTION)

我的猜测是在提交之前检查约束,并且它不会检查我所做的尚未提交的插入是否可以使约束通过而不是失败.但我确实希望这两个插入语句包含在同一个事务中.那我该怎么办?

UPDATE

我移动了$em-> persist($aObject); $EM->冲洗();退出交易,我仍然得到同样的错误.显然,我的猜测是错误的…但后来我真的不知道是什么导致错误.

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数据完整性和 FKs,然后 Doctrine associations,MySQL检查InnodDB表的数据完整性.你做的不对,它应该是

$entityManager->transactional(function($em) {
    $foreignObject = new DoctrineEntitiesForeignTable();
    $em->persist($foreignObject);

    $aObject = new DoctrineEntitiesA();
    $aObject->setForeign($foreignObject);
    $em->persist($aObject);

    $em->flush();
});

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读