web-dev-qa-db-fra.com

Comment obtenir la dernière identité dans Cakephp

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.

7
Jaiprakash Singh

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é.

19
XuDing

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() et getLastInsertId(), il renverra celles de ce second utilisateur!

Ainsi, les réponses suivantes sontBADréponses pour ce cas d'utilisation :

11
Rémi Becheras

utilisez l'option orderby desc dans Cakephp. 

$lastCreated = $this->Menu->find('first', array('order' => array('Menu.filedname' =>'desc'))`);
4
Vivek S
$this->Menu->getLastInsertId();

vous pouvez obtenir le dernier ID d'insertion par ce

4
Manish Patel

Tu peux essayer :

$data = array('menuName' => $_REQUEST['menuname'])
$this->Menu->create();
$this->Menu->save($data);
$id = $this->Menu->getLastInsertId();
3
Indrajeet Singh

Très facile. Simplement fais-le.

$this->Menu->save($newMenu);
$menuId = $this->Menu->id;
2
Rodrigo Almeida

Essaye ça

$this->ModelName->save($this->request->data);
$insertedId = $this->ModelName->id;
2
Sunil kumar
$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

1
arilia

Dans CakePHP 3.x vous pouvez le faire comme: 

$data = $this->model->save($data);
$data->id; // this will give the inserted id
0
CodeWhisperer