最後に挿入された行の ID を取得したい。これは私がマッパーで使用するコードです:
public function save(Application_Model_Projects $project)
{
$data = array(
'id_user' => $project->getIdUser(),
'project_name' => $project->getProjectName(),
'project_description' => $project->getProjectDescription(),
'due_date' => $project->getDueDate(),
'id_customer' => $project->getIdCustomer()
);
if(($id = $project->getId()) === null) {
unset($data['id']);
$this->getDbTable()->insert($data);
return $this->getDbTable()->lastInsertId();
}else {
$this->getDbTable()->update($data, array('id = ?', (int) $id));
return $id;
}
}
上記のコードによるとid
、オブジェクトの を返す必要があります。id
挿入後または現在のいずれかid
です。
この関数を使用するコード:
$currentUser = new Application_Model_UserAuth();
$project = new Application_Model_Projects();
$project->setProjectName($formValues['projectName'])
->setProjectDescription($formValues['projectDescription'])
->setDueDate(date("Y-m-d",strtotime($formValues['dueDate'])))
->setIdCustomer($formValues['assignCustomer'])
->setIdUser($currentUser->id);
$projectMapper = new Application_Model_ProjectsMapper();
$idProject = $projectMapper->save($project);
私が得るエラーは次のとおりです。
Fatal error: Call to undefined method Application_Model_DbTable_Projects::lastInsertId()
これの何が問題なのですか?それは最後のIDを返すべきではありませんか?挿入時にトリガーされるためです。別のコード シーケンスでは、 : を呼び出しlastInsertId
ます$Zend_Db_Table::getDefaultAdapter()->lastInsertId()
。唯一の違いはlastInsertIt
、拡張された dbTableを呼び出すようになったことZend_Db_Table_Abstract
です。