2
votes

Comment obtenir l'ID d'insertion après l'enregistrement dans la base de données dans CodeIgniter 4

J'utilise Codeigniter 4.

Et en insérant de nouvelles données comme celle-ci,

$data = [
        'username' => 'darth',
        'email'    => 'd.vader@theempire.com'
];

$userModel->save($data);

Qui est mentionné ici: Référence du modèle de CodeIgniter

Il fait l'insertion. Mais je n'ai trouvé aucune référence sur le point d'obtenir l'identifiant inséré après l'insertion.

Veuillez aider! Merci d'avance.


3 commentaires

voici quelques exemples avec insert stackoverflow.com/questions/16440366/… peut-être que cela vous répond


Est-ce que cela répond à votre question? comment obtenir le dernier identifiant d'insertion après l'insertion d'une requête dans l'enregistrement actif de codeigniter


Rien n'a vraiment fonctionné pour moi: (Merci


7 Réponses :


2
votes

J'ai obtenu une solution simple après avoir recherché le cœur du framework CI 4.

$db = db_connect('default'); 
$builder = $db->table('myTable');

$data = [
        'username' => 'darth',
        'email'    => 'd.vader@theempire.com'
];

$builder->insert($data);
echo $db->insertID();

J'espère qu'ils ajouteront bientôt une description claire sur les documents.


0 commentaires

-1
votes

J'ai eu le même problème mais, malheureusement, la documentation CI4 n'aide pas beaucoup. La solution utilisant un générateur fonctionne, mais c'est une solution de contournement à la modélisation des données. Je crois que vous voulez une solution de modèle pur, sinon vous ne le demanderiez pas.

$this->save($data);

En essayant tout ce à quoi je pouvais penser, j'ai décidé de stocker le résultat de la méthode de sauvegarde pour voir si renvoyé une valeur booléenne pour indiquer si l'enregistrement a réussi. En inspectant la variable, je me suis rendu compte qu'elle retournait exactement ce que je voulais: l'insertID perdu.

Je pense que CodeIgniter 4 est un framework assez simple et performant qui fait un travail décent dans les hôtes partagés où d'autres frameworks peuvent être un peu exigeants si vous apprenez mais il manque la même documentation fantastique et les exemples de CI3. Espérons que ce n'est que temporaire.

Au fait, votre code ne fonctionne que si vous utilisez le $ userModel en dehors du modèle lui-même, par exemple à partir d'un Controller. Vous devez créer un objet modèle comme:

$userModel = New WhateverNameModel();
$data = [any data];
$userModel->save($data);

Alternativement, si vous programmez une méthode à l'intérieur du modèle lui-même (ma manière préférée), vous devriez écrire

$data = [
        'username' => 'darth',
        'email'    => 'd.vader@theempire.com'
];

$id = $userModel->save($data);


2 commentaires

Merci pour votre contribution. Mais j'ai résolu ce problème que j'ai ajouté dans la dernière réponse.


Merci pour vos remerciements. C'est un fait que votre solution de contournement fait vraiment le travail et est en effet une bonne solution parfaitement correcte. Je voulais juste préciser qu'il existe une approche de modélisation pure pour la même situation. En fait, j'apprends encore et j'essaie de comprendre les nombreux nouveaux concepts qui sont venus avec CI4 qui, je crois, seront l'avenir du développement de ce cadre.



0
votes

Pour surmonter cela, j'ai modifié system / Model.php dans la méthode save () ---

$response = $this->insert($data, false);

// add after the insert() call 
$this->primaryKey = $this->db->insertID();

Maintenant, dans vos modèles, vous pouvez simplement référencer "$ this-> primaryKey" et cela vous donnera les informations nécessaires, tout en conservant la fonctionnalité de modélisation des données.

Je vais soumettre ceci aux développeurs CI, j'espère qu'il sera ajouté.


0 commentaires

3
votes

Il existe trois façons d'obtenir l'ID dans ci4:

$db = \Config\Database::connect();
$workModel = model('App\Models\WorkModel', true, $db);
$id = $workModel->insert($data);
        
echo $id;
echo '<br/>';
echo $workModel->insertID(); 
echo '<br/>';
echo $db->insertID();


0 commentaires

0
votes

Pour CI4

$settings = new SettingsModel();
$settingsData = $settings->find(1);

<?php namespace App\Models;

use App\Models\BaseModel;

class SettingsModel extends BaseModel
{
    protected $table      = 'users';
    protected $primaryKey = 'id';
}

$ settings-> find (1); renverra une seule ligne. il trouvera la valeur fournie en tant que $ primaryKey.


0 commentaires

3
votes

Cela fonctionne également.

       $user= new UserModel();

        $data = [
                 'username' => 'darth',
                  'email'    => 'd.vader@theempire.com'
              ];

        $user->insert($data);
        $user_id = $user->getInsertID();


0 commentaires

0
votes

salut les gars dans mon cas, j'utilise le modèle ci pour enregistrer les données et mon code est:

 $x=new X();
 $is_insert= $x->save(['name'=>'test','type'=>'ss']);
 if($is_insert)
     $inserted_id=$x->getInsertID()


0 commentaires