[英]MySQL delete and remove from many-to-many table in one transaction
是否可以從關聯表中刪除(多對多)並將同一行插入同一事務中?
這是我的關聯表:
CREATE TABLE image_tag (
imageid bigint(19) NOT NULL,
tagid bigint(19) NOT NULL,
PRIMARY KEY (imageid, tagid));
ALTER TABLE image_tag ADD INDEX FKimage_tag587679 (tagid), ADD CONSTRAINT FKimage_tag587679 FOREIGN KEY (tagid) REFERENCES tag (id);
ALTER TABLE image_tag ADD INDEX FKimage_tag426448 (imageid), ADD CONSTRAINT FKimage_tag426448 FOREIGN KEY (imageid) REFERENCES image (id);
當我創建一個新圖像並插入到圖像中時,在一個事務中插入到tag並插入到image_tag,一切正常。
當我想更新Image時出現問題,我:
例外:
Cannot add or update a child row: a foreign key constraint fails (`mydatabase`.`image_tag`, CONSTRAINT `FKimage_tag426448` FOREIGN KEY (`imageid`) REFERENCES `image` (`id`))
數據:
Original data: (194, 123), (194, 225), (194, 291)
New data: (194, 123), (194, 225), (194, 65)
源代碼(在PHP中):
if ($editation) {
if ($values->image->isOk()) {
$url = $img->load($values->id)->getUrl();
$values->image->move($this->wwwDir . "/" . $url);
} else {
$url = null;
}
$img->update($values->name, $values->descr, $url, null, $featured);
} else {
$uname = $img->createUniqueName($values->name);
$url = ImageManager::PATH . "/" . $uname . ".svg";
$values->image->move($this->wwwDir . "/" . $url);
$img->create($userId, $values->name, $url, $values->descr, null, $featured);
}
// Delete old image-tag associations if any
$this->db->query('DELETE FROM image_tag WHERE imageid = %i', $img->getId());
// Save tags and assign them to image
$tagIds = $this->tagManager->saveTags($values->tags);
$assoc = (new Dao\ImageTag())->setDb($this->db);
//throw new \Exception(implode(",", $tagIds));
foreach ($tagIds as $tagId) {
// EXCEPTION IS THROWED HERE (but only after editation)
$assoc->create($img->getId(), $tagId);
}
您不嘗試使用無效ID更新您的image_tag嗎? ..null,0,-1還是其他?
查看您的代碼。 我想$ img和$ values-> image是不一樣的,但是只有在提供$ values-> image時才加載$ img。 但是,您嘗試每次更新image_tag。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.