/ / Aufruf an undefinierte Methode Application_Model_DbTable_Projects :: lastInsertId () - zend-framework

Aufruf zu undefinierter Methode Application_Model_DbTable_Projects :: lastInsertId () - zend-framework

Ich möchte die ID der zuletzt eingefügten Zeile abrufen. Dies ist der Code, den ich im Mapper verwende:

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;
}
}

Laut dem obigen Code sollte es das zurückgeben id des Objekts. Es ist entweder die id nach dem Einfügen oder der aktuellen id.

Der Code, in dem ich diese Funktion verwende:

$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);

Der Fehler, den ich bekomme, ist:
Fatal error: Call to undefined method Application_Model_DbTable_Projects::lastInsertId()

Was ist daran falsch? Sollte die letzte ID nicht zurückgegeben werden? Weil sie beim Einfügen ausgelöst wird. In einer anderen Codesequenz rufe ich die lastInsertId: $Zend_Db_Table::getDefaultAdapter()->lastInsertId(). Der einzige Unterschied ist, dass ich jetzt anrufe lastInsertIt auf einer dbTable, die erweitert wird Zend_Db_Table_Abstract.

Antworten:

0 für die Antwort № 1

Die Antwort auf meine Frage ist, dass ich anrufen soll getAdapter() Vor lastInsertId().

Aktualisierter Code:

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

0 für die Antwort № 2

Wenn es sich um einen einspaltigen Primärschlüssel handelt, lautet der Rückgabewert standardmäßig lastInsertId. Sie können also auch Folgendes verwenden:

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