Obtenez le dernier ID d'insertion
-
26-09-2019 - |
Question
Bonjour J'utilise CakePHP 1.3 et je suis incapable de retreive id de la dernière ligne insérée. Je suis en fait en utilisant $ this-> Model-> id pour récupérer le dernier id Inséré mais je suis incapable d'obtenir l'identifiant. Lorsque essayé de vérifier ce qui est le type de retour, il est dit que bool (false), ce qui ne veut rien dire est renvoyé.
Ici, je suis le chargement d'un modèle différent dans un autre contrôleur, alors que ce serait la question ?? Mais même si je suis le chargement, je reviens rien !!
$this->loadModel('Contact');
$this->Contact->query("insert into contacts(tblContact_firstName,tblContact_lastName,tblContact_company,tblContact_department,tblContact_address,tblContact_country,tblContact_city,tblContact_state,tblContact_zipcode,tblContact_phone1,tblContact_email1) values('$sanitizedFormData[fname]','$sanitizedFormData[lname]','','$sanitizedFormData[company]','$sanitizedFormData[address]','$sanitizedFormData[country]','$sanitizedFormData[city]','$sanitizedFormData[state]','$sanitizedFormData[zip]','$sanitizedFormData[phone]','$sanitizedFormData[email]');");
$this->loadModel('Contact');
$contactId = $this->Contact->id;
Et quand je l'imprimé $ this-> array de contact récursive, j'ai trouvé la valeur de « id » vide clé. Alors, ce qui explique pourquoi je recevais une valeur vide.
Maintenant, étant donné ma situation, comment pourrais-je obtenir le dernier id Inséré, spécifique au contrôleur contact?
La solution
Lorsque vous utilisez query()
vous perdez beaucoup de CakePHP automagique fournit. Utilisez plutôt save()
.
En fait, vous avez même pas besoin de charger contact dans ce cas. Vous pouvez exécuter une requête du contrôleur de courant avec query()
sauver même à une autre table.
Vous pouvez également éviter d'utiliser loadModel()
si votre modèle actuel est en quelque sorte associée à un contact ($this->CurrentModel->AnotherOne->Contact->save(...)
).
Autres conseils
Je pense que vous voulez juste faire:
$this->getLastInsertID();
Si cela est MySQl vous pouvez utiliser « SELECT des contacts LAST_INSERT_ID () » requête pour obtenir la dernière ID. ou tout simplement "SELECT LAST_INSERT_ID ()"
Pour MSSQL il est "SELECT @@ IDENTITY".
Cela permet de contourner une solution dans CakePHP, donc il pourrait y avoir une meilleure solution.
Vous pouvez obtenir last inserted record id
par
echo $this->ModelName->getLastInsertID();
Alternativement, vous pouvez utiliser:
echo $this->ModelName->getInsertID();
Cette méthode peut être trouvée dans le gâteau / libs / modèle / model.php en ligne 2775
Remarque: Cette fonction ne fonctionne pas si vous exécutez la requête d'insertion manuelle