Comment enregistrer les données dans la base de données?
J'ai l'habitude d'enregistrer de nouvelles données dans la base de données comme ceci:
$this->MyTable->set(array(
'id' => $id,
'code' => $temp_code,
'status' => $status,
'age' => $age,
'location' => $location,
'money' => $money
));
$this->MyTable->save();
Si l'ID existe déjà dans la base de données-je mettre à jour ses champs correspondants comme ceci:
$this->Adtweet->id = $id;
$this->Adtweet->saveField('code', $temp_code);
$this->Adtweet->saveField('status', $status);
Est-il meilleur ou " bon " moyen de faire cela?
Lorsque je tente d'entrer un ID qui existe déjà et j'utilise le set
fonction, j'ai le SQL erreur d'intégrité:
(Erreur: SQLSTATE[23000]: Integrity constraint violation: 1062 Duplicate entry '150245925' for key 'PRIMARY')
Comment puis-je écrire une fonction proprement gère les entrées en double, sans avoir à retourner une erreur?
OriginalL'auteur trante | 2012-06-20
Vous devez vous connecter pour publier un commentaire.
Si vous souhaitez enregistrer de nouvelles données, il suffit d'utiliser
Model::save()
:Si vous souhaitez mettre à jour vos données simplement utiliser la même méthode sans appel
Model::create()
Voir aussi: http://book.cakephp.org/2.0/en/models/saving-your-data.html#model-save-array-data-null-boolean-validate-true-array-fieldlist-array
Edit:
Je suppose que c'est ce que vous cherchez:
$isIdExists = $this->ModelName->find('first', array( 'conditions' => array('ModelName.id' => $id)
---if ($isIdExists) { $this->ModelName->create(); }
merci de voir mon jour de réponse.
Merci pour la mise à jour. Quand j'ai essayé
$this->ModelNAme->create();
, une ligne avec l'ID zéro est créé. Mais j'ai une bonne ID de l'utilisateur. Alors je l'ai changé comme ça$this->ModelName->create( array ('id' => $id));
Cela a créé la bonne ligne. Mais après que!$this->ModelName->exists()
donne toujours vrai.. je suppose que je devrais travailler plus et plus..Peut-être que vous avez oublié de mettre l'ID de la colonne de
auto_increment
?Le principal problème ici est que cakephp s'attend à ce que la clé primaire est appelé 'id', si ce n'est pas le cas, vous devez dire à ce modèle. Donc, si votre champ de clé primaire est appelé "twitter_user_id" vous devez définir
public $primaryKey = 'twitter_user_id';
dans votre modèle.OriginalL'auteur Julian Hollmann
Données publiées exemple
Essayez ceci pour ajouter
Essayez ceci pour modifier
OriginalL'auteur Sunil kumar