J'utilise la requête dans Cakephp
$this->Menu->query("INSERT INTO frd_menus SET menuName= '".$_REQUEST['menuname']."'");
Comment obtenir le dernier insert id de cette requête dans Cakephp? S'il vous plaît des conseils.
S'il n'y a pas de raison spécifique.
Tu devrais utiliser
$this->Menu->save($data)
insérer les données. Ensuite, vous pouvez utiliser
$this->Menu->getLastInsertId();
pour obtenir le dernier identifiant inséré.
Dans presque tous les cas, vous devriez utiliser la méthode du modèle pour interroger votre base de données.
Model::query()
permet d'exécuter des requêtes complexes qui seront plus complexes que d'utiliser les méthodes du modèle ou, dans certains cas, lorsque vous n'avez pas le choix.
Dans votre cas, cela est très utile car Model::save()
exécute un rappel dans la structure qui définit l'attribut Model::id
pour vous.
Donc, cela vous permet de le récupérer immédiatement:
if ($this->Menu->save($data)) {
$lastId = $this->Menu->id;
}
Soyez prudent!
De l'autre côté et comme dit par d'autres réponses il y a la méthode suivante:
Model::getLastInsertId()
Mais VOUS DEVEZ ÊTRE TRÈS ATTENTION avec cette méthode et VOUS NE DEVEZ PAS L'UTILISER DANS CETTE UTILISATION car il obtient leDERNIERinséré, mais PAS le dernier que vous venez d'insérer dans la déclaration de code précédente!
Si un utilisateur (lors d'une autre demande simultanée sur le serveur) enregistre des données entre
save()
etgetLastInsertId()
, il renverra celles de ce second utilisateur!Ainsi, les réponses suivantes sontBADréponses pour ce cas d'utilisation :
utilisez l'option orderby desc dans Cakephp.
$lastCreated = $this->Menu->find('first', array('order' => array('Menu.filedname' =>'desc'))`);
$this->Menu->getLastInsertId();
vous pouvez obtenir le dernier ID d'insertion par ce
Tu peux essayer :
$data = array('menuName' => $_REQUEST['menuname'])
$this->Menu->create();
$this->Menu->save($data);
$id = $this->Menu->getLastInsertId();
Très facile. Simplement fais-le.
$this->Menu->save($newMenu);
$menuId = $this->Menu->id;
Essaye ça
$this->ModelName->save($this->request->data);
$insertedId = $this->ModelName->id;
$this->Menu->query("INSERT INTO frd_menus SET menuName= '".$_REQUEST['menuname']."'");
$result = $this->Menu->query("SELECT LAST_INSERT_ID()");
$last_id = $result[0][0];
cela devrait fonctionner, mais je pense que ce sera mieux si vous créez une relation entre menus
et frd_menus
et utilisez la fonction save
Dans CakePHP 3.x vous pouvez le faire comme:
$data = $this->model->save($data);
$data->id; // this will give the inserted id