web-dev-qa-db-fra.com

Comment obtenir l'id généré après une requête INSERT réussie?

Je voudrais obtenir le id du dernier jeu de données sauvegardé dans une opération JTable.

Au moment où j'ai eu ceci:

// Create and populate an object.
$value         = new stdClass();
$value->userid = (int)$userid;
$value->type   = $data['type']; 

// Insert the object into the user profile table.
$handle = JFactory::getDbo()->insertObject('#__bestia_handles', $value);

Maintenant, j'aimerais obtenir le id de cet objet enregistré.

$handle contient uniquement true ou false.

Comment puis-je résoudre ce problème?

1
MyFault

Résolu :-)

Il suffit de définir

$db                         =   JFactory::getDbo();

et après

$db->insertObject(...)

Je peux appeler

$db->insertid();
2
MyFault

J'ai le même problème car j'utilise plusieurs tables pour mes données et les relie, mais cela semble être une bonne méthode, bien que je ne comprenne pas pourquoi, il y a une raison pour laquelle la méthode de sauvegarde de JTable ne renvoie que vrai/faux il serait sûrement préférable de renvoyer l’article id ou NULL, ce qui serait bien plus utile. Bien sûr, je présume que rien ne vous empêche de créer une substitution dans votre propre classe de table pour le faire comme ceci ...

    MyComponentTableMyTable extends JTable
    {
        public function save($src, $orderingFilter= '', $ignore= '')
        {
            /*call parent save function and return either insertid or null depending on whether or not parent save function returns true or false */
            return ( parent::save ( $src, $orderingFilter, $ignore ) ? $_db->insertid () : NULL ) ;
        }
    }

Je n'ai pas encore essayé cela, mais je ne vois pas pourquoi cela ne fonctionnerait pas.

0
TheKLF99

Lorsque vous manipulez une seule ligne de données, essayez d’utiliser JTable. Il suit le modèle d'enregistrement actif. Après avoir effectué une $row->save(), $row->id est mis à jour avec la valeur réelle de la clé primaire.

0
Chris