Php 外键约束失败,因为insert语句尚未提交(MySQL)
我有一个使用2的PHP脚本,它基本上执行以下操作:Php 外键约束失败,因为insert语句尚未提交(MySQL),php,mysql,doctrine-orm,Php,Mysql,Doctrine Orm,我有一个使用2的PHP脚本,它基本上执行以下操作: $entityManager->transactional(function($em) { $foreignObject = new DoctrineEntities\ForeignTable(); $em->persist($foreignObject); $em->flush(); $aObject = new DoctrineEntities\A(); $aObject->F
$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();
});
我遇到一个完整性约束冲突:
外键约束失败(dbName.a,约束a_foreigned foreigned key(foreignd)引用了ForeignTable
(ID
)ON DELETE ON UPDATE ON NO ACTION)
我的猜测是,约束是在提交之前检查的,它不会检查我所做的尚未提交的插入是否会使约束通过而不是失败。但我确实希望这两条insert语句包装在同一事务中。那我该怎么办
更新
我移动了$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
表国外表
CREATE TABLE `ForeignTable` (
`ID` int(11) NOT NULL AUTO_INCREMENT,
PRIMARY KEY (`ID`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_swedish_ci
我建议阅读MySQL数据完整性,然后由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的答案,因为接受这个答案对这里的任何人都没有帮助…你能试着在SQLfiddle制作一个样本吗?如果我没有误读,它听起来应该“正常工作”。@Joachim Isaksson |我一直试图在mysql中严格重现这个问题,但我一直未能做到。可能问题与Doctrine处理事务的方式有关..?如果没有看到代码,很难说,但是如果您使用Doctrine,您可以尝试在持久化之间刷新,这样它们就不会被重新排序。我同意,这一定是您的应用程序(或ORM层)中的某个内容,因为语句的基本顺序很好。@Joachim Isaksson:什么意思,重新排序
?我正在使用现有的数据库架构。条令关联
链接仅提供如何使用条令通过创建新的数据库架构来设置关联的文档。你有没有关于模式已经存在的案例的任何资料?