IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Bibliothèques et frameworks PHP Discussion :

Ignorer un insert ou update si


Sujet :

Bibliothèques et frameworks PHP

  1. #1
    Membre du Club
    Inscrit en
    Février 2006
    Messages
    96
    Détails du profil
    Informations personnelles :
    Âge : 44

    Informations forums :
    Inscription : Février 2006
    Messages : 96
    Points : 47
    Points
    47
    Par défaut Ignorer un insert ou update si
    Bonjour ,

    je veux juste récupérer l'ID du record s'il existe dans beforeSave du model afin de faire un autre traitement dans le afterSave avec cet ID.
    si non il fait l'insertion.

    voici mon model actuel == qui fai toujours des INSERT
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     public function beforeSave($options = array()) {
            parent::beforeSave($options);
            /**
             * Verifier si la societe existe
             */
            $c = $this->findByEmail($this->data['Company']['email']);
            if ($c) {
                $this->id = $c['Company']['id'];
                return true;
            } 
            return true;
        }
    Ps.: J'utilise les relations HABTM dans ce model

    Merci ...

  2. #2
    Membre expert
    Avatar de Spartacusply
    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Points : 3 274
    Points
    3 274
    Par défaut
    Salut !

    Je me suis posé la même question que toi et en fait il s'avère que la détermination de savoir si c'est un update ou un insert qui sera effectué est déterminé AVANT l'appel aux méthodes callbacks. En fait, ce qu'il faut c'est réécrire la méthode "exists" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    public function exists($id = null) {
        //On oublie pas de laisser le comportement habituel dans le cas ou on test pas l'email
        if (is_numeric($id) OR isset($this->id)) {
            return parent::exists($id);
        }
     
        $company = $this->findByEmail($this->data['Company']['email'],'Company.id');
        if ($company) {
            $this->id = $image['Company']['id'];
            return true;
        }
        return false;
    }
    Attention néanmoins avec ce code, il faut bien définir des méthodes de validation des champs (en particulier du champ email forcément), parce que sinon ça risque de mettre à jour des champs au lieu d'avoir une véritable insertion dans certain cas.
    Un message utile vous a aidé ? N'oubliez pas le

    www.simplifions.fr - Simplifier vos comptes entre amis !

Discussions similaires

  1. [Conception] Formulaires identiques pour INSERT et UPDATE
    Par MiJack dans le forum PHP & Base de données
    Réponses: 15
    Dernier message: 16/06/2006, 11h34
  2. performance delete/insert vs update
    Par Dionisos dans le forum Langage SQL
    Réponses: 6
    Dernier message: 01/08/2005, 18h23
  3. [Debutant] Insert ou update...
    Par kluh dans le forum Oracle
    Réponses: 15
    Dernier message: 13/07/2005, 14h35
  4. événement sur INSERT, DELETE, UPDATE
    Par papouAlain dans le forum MS SQL Server
    Réponses: 3
    Dernier message: 24/12/2004, 15h40
  5. [Débutant][PS] modifier un insert en update
    Par franculo_caoulene dans le forum MS SQL Server
    Réponses: 5
    Dernier message: 19/05/2004, 16h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo