问题
I tried using LAST_INSERT_ID()
when getting the last id of the autoincrement primary key column but I get EOF exception :
function add($tab) {
$champs= "";
$value = "";
$separateur ="";
$tab["commande_date"] = convertDateFormat5($tab["commande_date"]);
foreach ($tab as $k => $v){
if ($k == "salle_code" || $k == "table_code")
continue;
$champs .= $separateur . $k;
$value .= $separateur . "'" . $v . "'";
$separateur = ",";
}
$champs = '('.$champs.')';
$value = '('.$value.')';
$sSQL = "
INSERT INTO Commande $champs
VALUES $value
";
$query = new Query($sSQL,$this->getDI());
$ret = $query->execute();
$sSQL = "SELECT LAST_INSERT_ID() as last_id";
$queryId = new Query($sSQL,$this->getDI());
return $queryId->execute();
}
So how to get the last id with Phalcon
?
回答1:
you can use the lastInsertId()
function
$sSQL = "INSERT INTO Commande $champs VALUES $value ";
$query = new Query($sSQL,$this->getDI());
$ret = $query->execute();
$lastId = $query->lastInsertId();
Update
Here is an example of inserting and getting back the lastinsert id.
$success = $connection->insert(
"robots",
array("Astro Boy", 1952),
array("name", "year")
);
//Getting the generated id
$id = $connection->lastInsertId();
I think this might help you.
回答2:
The way you are handling this is fairly anti-MVC and you leave a lot of the Phalcon functionality on the table. You should have a database model named Commande which should be created something like:
$comande = new Commande();
then you can assign values like:
$comande->field1 = "hello";
$comande->adifferentfield = "world";
...
You'd then follow that up with:
$comande->save(); //yes I am aware we should test for success
Then you could access your key field, which would be populated automatically, something like:
print $comande->id;
You're missing out on a lot of the error handling and validation going about it the way you are.
回答3:
$yourModel = new YourModel();
$yourModel->save() // Or create();
$newId = $yourModel->getWriteConnection()->lastInsertId();
I think it's easier in this way. Hope it's helpful.
回答4:
In controller when you save:
if ($client->save() == false) {
foreach ($client->getMessages() as $message) {
$this->flash->error($message);
}
return $this->forward('clients/new');
}
// Get new client ID and redirect to new client
$this->response->redirect("client/page/$client->id");
$this->view->disable();
来源:https://stackoverflow.com/questions/32741402/how-to-get-last-insert-id-with-phalcon