Comment puis-je savoir si je suis en beforeSave d'une modification ou une création? CakePHP

StackOverflow https://stackoverflow.com/questions/1751476

Question

J'ai un modèle où je dois faire un peu de traitement avant d'enregistrer (ou dans certains cas, avec une modification), mais généralement pas lors de l'édition simple. En fait, si je fais le traitement de la plupart des modifications, le champ résultant sera erroné. En ce moment, je travaille dans le rappel beforeSave du modèle. Comment puis-je savoir si je suis venu de la modifier ou ajouter?

Frank Luke

Était-ce utile?

La solution

function beforeSave() {
  if (!$this->id && !isset($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}

Autres conseils

Ceci est essentiellement le même que la réponse de neilcrookes, sauf que je suis en utilisant empty() en tant que test, par opposition à !isset() .

Si une clé de tableau existe, mais il est vide, alors! Isset retournera false, alors vide retourne vrai.

J'aime utiliser le même fichier d'affichage pour ajouter et modifier, de garder mon code SEC, ce qui signifie que lors de l'ajout d'un enregistrement, la touche « id » sera toujours défini, mais garderai rien. poignées gâteau cette fin, à l'exception de la version neilcrookes du code ne reconnaît pas comme un complément, car la clé primaryKey est définie dans le tableau de données (même si elle ne retient rien). Alors, en changeant isset! Vider les comptes juste pour ce cas.

function beforeSave() {
  if (!$this->id && empty($this->data[$this->alias][$this->primaryKey])) {
    // insert
  } else {
    // edit
  }
  return true;
}
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top