1

最後に挿入された行の 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です。

4

2 に答える 2

0

単一列の主キーの場合、戻り値はデフォルトで lastInsertId になるため、これも使用できます。

return $this->getDbTable()->insert($data);
于 2012-07-12T08:46:17.573 に答える
0

上記の私の質問に対する答えは、 のgetAdapter()前に電話する必要があるということlastInsertId()です。

更新されたコード:

if(($id = $project->getId()) === null) {
    unset($data['id']);
    $this->getDbTable()->insert($data);
    return $this->getDbTable()->getAdapter()->lastInsertId();
}
于 2012-07-11T15:24:34.240 に答える