так что проблема в следующем:
"SQLSTATE[23000]: Integrity constraint violation: 1452"
Если бы мне пришлось делать догадки без трассировки стека, я бы сказал, что следующая строка - это проблема:
</p>
<pre><code>$tagId = $this->insert(array(
'tag' => trim($tag)
));
Я предполагаю, что у вас есть уникальное ограничение на вашу таблицу тегов, чтобы гарантировать, что дубликаты тегов не будут добавлены в таблицу.
Проблема в том, что эта строка не должна быть вставкой, это должна быть getTagIDByTag и, если это не так, вставка.
ТАК,
</p>
<pre><code>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)
{
// FIRST TRY TO GET THE TAG
$tagId = $db->fetchCol('SELECT Tag_ID FROM Tag WHERE tag = ?', trim($tag));
// ZEND RETURNS NULL IF THE QUERY DOESN'T RETURN ANYTHING
if(is_null($tagId))
{
// CREATE THE TAG
$tagId = $this->insert(array(
'tag' => trim($tag)
));
}
$reviewTag->insert(array(
'Tag_ID' => $tagId, // USE THE TAG ID LIKE NORMAL
'Review_ID' => $reviewId,
));
}
}
}