调用未定义的方法Application_Model_DbTable_Projects :: lastInsertId()

时间:2012-07-11 15:04:35

标签: zend-framework

我想检索最后插入行的id。这是我在mapper中使用的代码:

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()。唯一的区别是,现在我在dbTable上调用lastInsertIt,扩展Zend_Db_Table_Abstract

2 个答案:

答案 0 :(得分:0)

上述问题的答案是我应该在getAdapter()之前致电lastInsertId()

更新的代码:

if(($id = $project->getId()) === null) {
    unset($data['id']);
    $this->getDbTable()->insert($data);
    return $this->getDbTable()->getAdapter()->lastInsertId();
}

答案 1 :(得分:0)

如果它是单列主键,则默认返回值为lastInsertId,因此您也可以使用:

return $this->getDbTable()->insert($data);