我的MySQL数据库中有两个表,它们是这样创建的:
CREATE TABLE table1 (
id int auto_increment,
name varchar(10),
primary key(id)
) engine=innodb
和
CREATE TABLE table2 (
id_fk int,
stuff varchar(30),
PRIMARY KEY (`id_fk`),
CONSTRAINT fk_id FOREIGN KEY(id_fk) REFERENCES table1(id) ON DELETE CASCADE
) engine=innodb
(这些不是原始表。重点是table2有一个引用表1中主键的外键)
现在在我的代码中,我想在一个事务中向两个表添加条目。我这样做:
$table1 = new table1();
$table1->setTransaction($transaction);
$table1->name($name);
if (!$table->create()) {
foreach ($table1->getMessages() as $message) {
$this->flash->error($message);
}
$transaction->rollback("Can't save table1");
} else {
$table2 = new table2();
$table2->setTransaction($transaction);
$table2->setId($table1->getId());
$table2->setStuff($stuff);
if (!$table2->create()) {
foreach ($table2->getMessages() as $message) {
$this->flash->error($message);
}
$transaction->rollback("Can't save password");
}
$transaction->commit();
table1 create()是成功的,但是,当我尝试创建table2时,它总是会出现一个Constraint Violation错误,声明字段的值为" Id"在引用的表上不存在。如何使用phalcon事务将数据保存到单个事务中的两个引用表中。感谢。