J'ai un modèle CakePHP - Utilisateur - qui a des liens avec un système d'entreprise externe. Je stocke certaines données sur ces systèmes et d'autres données localement. Dans ma méthode User::beforeSave()
, j'essaie de définir un ID, d'envoyer les données (avec cet ID personnalisé) à mes systèmes d'entreprise puis, s'il y est inséré, de renvoyer true afin que Cake insère le nouvel enregistrement utilisateur avec le même ID pour que je puisse les lier plus tard.CakePHP: Est-il possible d'insérer un enregistrement avec une valeur de clé primaire prédéfinie?
Je n'arrive pas à trouver un moyen d'y arriver. Y a-t-il un moyen pour d'insérer un enregistrement CakePHP avec une valeur de clé primaire spécifiée par l'utilisateur? J'utilise des UUID pour qu'il n'y ait (effectivement) aucune possibilité de chevauchement.
$this->data['User']['id'] = String::uuid()
try {
$user_proxy = new CoreServicesUserProxy();
$corp_user = $user_proxy->CreateUser (
array (
'user' => array (
'UserName' => 'myusername',
'EmailAddress' => $this->data['User']['email'],
'SecurityId' => $this->data['User']['id']
)
)
);
}
catch (Exception $e) {
// error handling stuff
return false;
}
Avez-vous essayé de définir $ Model-> id avec data ['User'] ['id']? Serait-il correct si vous insérez simplement un nouvel utilisateur dans une transaction, obtenez le nouvel identifiant, appelez le service et si tout s'est bien passé, validez simplement? –
Non, je suppose que je n'ai pas fait ça. Je pensais que cela forcerait une mise à jour plutôt que d'insérer si je lisais les docs correctement. Pour l'instant, j'ai déplacé l'appel de l'API vers User :: afterSave() et ça marche bien, ce n'est pas ma séquence idéale. Je vais regarder dans les transactions, mais je me demande si je peux utiliser ceux-ci tout en engageant un rappel. Merci pour votre aide. –