1
我正在開發一個系統,其中有一個實體「程序」,其中有一些「位置」通過鏈接表。我使用Zend Framework和Zend_Db_Table。Zend_Db_Table - 在事務重複條目中刪除後插入錯誤
位置1 ----- * programlocation * ------ 1個節目
在我的映射我有保存功能(),它應該保存程序:
public function save(Application_Model_Program $program)
{
try
{
//start transaction
$this->_getDbTable()->getAdapter()->beginTransaction();
//make sure category is saved (has an id)
$categoryMapper = new Application_Model_Mapper_ProgramCategory();
$categoryMapper->save($program->getCategory());
$programData = array(
'title'=>$program->getTitle(),
'slug'=>$program->getSlug(),
'description'=>$program->getDescription(),
'dateFrom'=>$program->getDateFrom()->toString(self::DB_DATE_FORMAT),
'dateTo'=>$program->getDateTo()->toString(self::DB_DATE_FORMAT),
'category'=>$program->getCategory()->getId()
);
if($program->getId() === null)
{
$newId = $this->_getDbTable()->insert($programData);
$program->setId($newId);
}
else
{
$where = $this->_getDbTable()->getAdapter()->quoteInto("id = ?", $program->getId());
$this->_getDbTable()->update($programData, $where);
}
//save locations to program
$programProgramLocationMapper = new Application_Model_Mapper_Link_ProgramProgramLocation();
$programProgramLocationMapper->saveLocationsToProgram($program->getLocations(), $program);
//commit
$this->_getDbTable()->getAdapter()->commit();
}
catch(Exception $e)
{
//rollback transaction
$this->_getDbTable()->getAdapter()->rollBack();
throw $e;
}
}
的Application_Model_Mapper_Link_ProgramProgramLocation :: saveLocationsToProgram方法是這樣的:
public function saveLocationsToProgram(
array $locations,
Application_Model_Program $program)
{
$deleteWhere = $this->_getDbTable()->getAdapter()->quoteInto("program = ?", $program->getId());
$this->_getDbTable()->delete($deleteWhere);
foreach($locations as $location)
{
$data = array('program'=>$program->getId(), 'location'=>$location->getId());
$this->_getDbTable()->insert($data);
}
}
我的問題是將引發異常在最後顯示INSERT語句「的mysqli聲明EXE可愛的錯誤:'PRIMARY'鍵重複輸入'1-1'「。所以看起來插入前沒有正確執行刪除語句。但是,刪除語句正確地返回刪除條目的數量,如果我在刪除後做了選擇,條目似乎被正確刪除。
同樣的問題發生在具有標籤到文件的類似結構中。
我不知道是什麼導致了這個問題,以及如何解決這個問題,如果你們中的任何一個人擁有它,它會很好,因爲它阻礙了系統的功能。