Yii comment utiliser le modèle de mise à jour, même si l'enregistrement est nouveau
J'ai un système qui est très important pour être au plus près en temps réel que possible.
Pour cette raison, quand je suis à l'extraction de données à partir d'une source externe je veux utiliser $model->mise à jour au lieu de l'exécuter 2 requêtes :
$model->find()
if(new)
$model->save
else
$model->update
C'est trop de temps...puis-je utiliser $model->mise à jour et si l'enregistrement est nouveau, il sera tout simplement le créer?
J'ai regardé le code de mise à jour, mais je ne suis pas sûr de savoir comment le remplacer.
public function update($attributes=null)
{
if($this->getIsNewRecord())
throw new CDbException(Yii::t('yii','The active record cannot be updated because it is new.'));
if($this->beforeSave())
{
Yii::trace(get_class($this).'.update()','system.db.ar.CActiveRecord');
if($this->_pk===null)
$this->_pk=$this->getPrimaryKey();
$this->updateByPk($this->getOldPrimaryKey(),$this->getAttributes($attributes));
$this->_pk=$this->getPrimaryKey();
$this->afterSave();
return true;
}
else
return false;
}
- Trop de temps? Pourquoi? Où est exactement le temps d'être consommé?
- Il n'est pas possible de faire tout le CRUD états "combiné" ou sans la nécessité de l'autre. Vous ne pouvez pas dire à la base de données
Make a new record in the table by updating a not existing one
. Vous ne pouvez pas mélangerINSERT INTO <table>
avecUPDATE <table> WHERE
. Vous êtes lié par les limites de la base de données classique, les langages de requête. MAIS: comme indiqué dans la réponse ci-dessoushttp://stackoverflow.com/a/16336521/431967
il vous suffit de faire $model->save().
Vous devez vous connecter pour publier un commentaire.
fonctionne de la même manière que vous voulez. si le modèle est nouveau, il va insérer et si le modèle existe pas, il sera mise à jour.
http://www.yiiframework.com/doc/guide/1.1/en/database.ar#updating-record
N'avez rien à faire
$model->isNewRecord va vérifier que le dossier est de nouveau ou non avant l'exécution de la requête.
donc $model->enregistrer va créer le nouveau dossier si le $model->isNewRecord renvoie la valeur "true",
où, comme si elle renvoie "false" $model->enregistrer mettra à jour l'enregistrement à l'égard de la clé primaire .