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

发布时间:2022-04-30 发布网站:脚本宝典
脚本宝典收集整理的这篇文章主要介绍了php – 外键约束失败,因为insert语句尚未提交(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->冲洗();退出交易,我仍然得到同样的错误.显然,我的猜测是错误的…但后来我真的不知道是什么导致错误.

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 DoctrineEntities\ForeignTable();
    $em->persist($foreignObject);

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

    $em->flush();
});

脚本宝典总结

以上是脚本宝典为你收集整理的php – 外键约束失败,因为insert语句尚未提交(MySQL)全部内容,希望文章能够帮你解决php – 外键约束失败,因为insert语句尚未提交(MySQL)所遇到的问题。

如果觉得脚本宝典网站内容还不错,欢迎将脚本宝典推荐好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。