gpt4 book ai didi

zend-framework - 任何优雅的解决方案如何插入多对多表?

转载 作者:行者123 更新时间:2023-12-04 06:49:00 25 4
gpt4 key购买 nike

我得到了这些表:

  • Tag - 包含标签名称和 id (Tag_ID, tag)
  • TagReview - 标签和评论之间的链接表(Review_ID、Tag_ID)
  • 审核 - 进行审核。 (评论 ID、内容……)

目前我在添加或编辑评论时进行了插入。在我的 Tag 表类中,从 Zend_DB_Table 扩展...插入在某些情况下有效,但随后因 sql 错误“SQLSTATE[23000]: Integrity constraint violation: 1452”而失败

    public function insertTags($reviewId, $tagList) {
$reviewTag = new Application_Model_DbTable_ReviewTag;
$tags = explode(self::SEPERATE, $tagList);

foreach ($tags as $tag) {
$tag = trim($tag);
$tagRow = $this->fetchRow(array('tag = ?' => $tag));
if ($tagRow == null) {
$tagId = $this->insert(array(
'tag' => trim($tag)
));
$reviewTag->insert(array(
'Tag_ID' => $tagId,
'Review_ID' => $reviewId,
));
}

}
}

最佳答案

所以问题是:

"SQLSTATE[23000]: Integrity constraint violation: 1452"

如果我不得不在没有堆栈跟踪的情况下进行猜测,我会说以下行是问题所在:



$tagId = $this->插入(数组(
'标签' => 修剪($标签)
));

我假设您对标签表有唯一约束,以确保不会将重复的标签添加到表中。

问题是这一行不应该是一个插入,它应该是一个 getTagIDByTag 并且失败,插入。所以,



公共(public)函数 insertTags($reviewId, $tagList)
{
$reviewTag = new Application_Model_DbTable_ReviewTag;
$tags = explode(self::SEPERATE, $tagList);

foreach($标签作为$标签)
{
$标签=修剪($标签);
$tagRow = $this->fetchRow(array('tag = ?' => $tag));
如果($tagRow == null)
{
//首先尝试获取标签
$tagId = $db->fetchCol('SELECT Tag_ID FROM Tag WHERE tag = ?', trim($tag));

//如果查询没有返回任何东西,ZEND 返回 NULL
如果(is_null($tagId))
{
//创建标签
$tagId = $this->插入(数组(
'标签' => 修剪($标签)
));
}

$reviewTag->插入(数组(
'Tag_ID' => $tagId,//像平常一样使用标签 ID
'Review_ID' => $reviewId,
));
}
}
}

关于zend-framework - 任何优雅的解决方案如何插入多对多表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6664070/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com