Travailler avec la version bêta de CakePHP 3.0, semble être un problème simple, mais j'ai cherché dans les documents et je ne trouve rien. Après avoir inséré un nouvel enregistrement à l'aide de $ this-> Model-> save (), j'aimerais obtenir l'ID de clé primaire auto_increment de l'enregistrement nouvellement créé.
Avec Cake 2.x, je pouvais faire:
$record_id=$this->ModelName->id;
ou
$record_id=$this->ModelName->getLastInsertID();
Cependant ni l'un ni l'autre ne semble fonctionner dans CakePHP 3.0.
Merci
Enfin trouvé la réponse, si quelqu'un d'autre rencontre cela:
$result=$this->ModelName->save($whatever);
$record_id=$result->id;
à cakephp3.X J'ai trouvé ceci:
if ($articlesTable->save($article)) {
// The $article entity contains the id now
$id = $article->id;
}
http://book.cakephp.org/3.0/en/orm/saving-data.html#inserting-data
Vous pouvez résoudre ce problème de la manière suivante.
Pour CakePHP 3.x
$result = $this->ModelName->save($this->request->data);
$insertedId = $result->id;
Pour CakePHP 2.x
$this->ModelName->save($this->request->data);
$insertedId = $this->ModelName->getLastInsertId();
$result=$this->ModelName->find('all',['fields'='id'])->last();
$record_id=$result->id;
Ceux-ci fonctionnent pour le modèle réellement ORM.
$result = $this->Model->save($data);
$id = $result->id;
Pour obtenir l'identifiant de l'enregistrement nouvellement créé cakePHP 3.x, c'est très simple, il suffit de vérifier si l'entité a bien été sauvegardée, sinon vous n'aurez pas accès à l'identifiant. Le code est très simple
$this->loadModel('ModelName');
$newEntity = $this->ModelName->newEntity();
Ainsi, après avoir chargé votre modèle et déclaré un nouvel enregistrement, vous pouvez mettre les valeurs sur l'entité avant de l'enregistrer. Par exemple, s'il s'agit d'une demande de publication, vous pouvez faire:
Pour procéder champs par champs:
$newEntity->name = $this->request->getData('name');
ou (selon la version cakePHP, le premier exemple provient de la version récente)
$newEntity->name = $this->request->data('name');
Sinon globalement, dans ce cas, les attributs de nom de vos champs dans le formulaire doivent être identiques aux attributs de votre entité dans la base de données.
$newEntity = $this->ModalName->patchEntity($newEntity, $this->request->getData());
Et une fois que l'entité est prête, vous n'aurez accès à son identifiant que s'il est enregistré dans la base de données.
Solution pour obtenir l'ID du dernier enregistrement, vous devez faire ceci:
if($this->ModalName->save($newEntity) {
//you can get ID here
$id = $newEntity->id;
}
J'espère que ce sera utile.
Je me bats avec ça depuis un bon moment avant de le faire fonctionner. La méthode de sauvegarde mettra à jour l'entité avec le dernier ID d'insertion tant que l'ID d'entité n'est pas déjà défini. Si vous créez un nouvel enregistrement et que l'ID d'entité est défini sur zéro, la méthode de sauvegarde ne le mettra pas à jour, alors assurez-vous que l'ID d'entité n'est pas défini:
$table = TableRegistry::get('MyModel');
$record = $table->newEntity($data);
// Unset the id if present and set to zero:
if (isset($record->id) && ($record->id==0)){
unset($record->id);
}
if ($saved = $table->save($record)){
$id = $record->id; // get the last insert id
}
Dans CakePHP 3.0
$statement = $query1->insert("columns of milestone");
$id = $statement->lastInsertId('Milestones'); //Here it will return the last insert id
NOTE Jalons est le nom de la table