我有一个使用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();
});
我遇到了完整性约束违规:
外键约束失败(dbName.A,CONSTRAINT A_ForeignID FOREIGN KEY (ForeignID) REFERENCES
ForeignTable
(ID
) ON DELETE NO ACTION ON UPDATE NO ACTION)
我的猜测是在提交之前检查了约束,并且它不检查我所做的尚未提交的插入是否可能使约束通过而不是失败。但我真的希望这两个插入语句包含在同一个事务中。那么我能做什么呢?
更新
我$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