1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : novembre 2002
    Messages : 31
    Points : 34
    Points
    34

    Par défaut Methode delete customisée

    Bjr
    J'ai des éléments liés entre eux.
    Lorsque je souhaite détruire un élément maitre, afin de rester compatible avec la philosophie de MF je modifie la fonction delete de l'element fils afin qu'elle prenne 2 cas :
    1- Appel pour destruction venant de l'element pere (Objet Qrys)
    2. Appel pour destruction "normale" (objet Keywords)

    Lors de l'appel type 1, il n'y a pas d'URl, donc de token ni de besoin en terme d'affichage.
    Juste une exécution d'un delete de type Sql.

    Le code dans le fichier main.php de keywords est
    public function _delete($Qry_id = NULL){
    $tMessage=$this->processDelete();

    if ( isset($Qry_id)) {
    echo 'cherche avec id qry' . PHP_EOL;
    /* Recherche avec l'id de requete */
    $oKeywords=model_keywords::getInstance()->findManyByQry( $Qry_id);
    $oKeywords->delete();
    return;
    }

    /* recherche avec l'id de keyword */
    $oKeywords=model_keywords::getInstance()->findById( _root::getParam('id') );

    $oView=new _view('keywords::delete');
    $oView->oKeywords=$oKeywords;

    $oPluginXsrf=new plugin_xsrf();
    $oView->token=$oPluginXsrf->getToken();
    $oView->tMessage=$tMessage;

    $this->oLayout->add('main',$oView);
    }
    Merci d'avance pour votre aide.

  2. #2
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Il faut bien différencier le model (accès à la base) du module (le controleur qui fait le lien entre le model et les vues)
    si vous souhaitez executer une requete SQL, passer par le model

    Vous ne devez pas avoir de paramètre dans une méthode préfixée par un "_"
    Ces methodes publiques correspondent à des "actions", ou page de votre module

    article::list => module article, méthode _list() ..

    Attention également: findMany retourne un tableau d'objets, il faut utiliser findOne pour retourner un seul enregistrement
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  3. #3
    Nouveau membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : novembre 2002
    Messages : 31
    Points : 34
    Points
    34

    Par défaut

    Si je comprends bien :
    je complète mes modèles avec des fonctions de delete dans les fichiers model_xxxx
    /* Delete pour une query */
    public function deleteByQry($Qrys_id){
    return $this->execute('DELETE * FROM '. $this->sTable.' WHERE qrys_id=?',$Qrys_id );
    }

    /* Delete pour un mot cle */
    public function deleteById($uId){
    return $this->execute('DELETE * FROM '.$this->sTable.' WHERE id=?',$uId );
    }
    par contre ou faut il que j'appelle ces méthodes dans l'element pere ?
    Il y a plusieurs cinématiques possibles :
    1) destruction d'un element pere (Qrys) -> destruction de tous les éléments fils, puis de l'élement pere
    2) destruction d'un element fils

    Merci pour votre retour.

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : novembre 2002
    Messages : 31
    Points : 34
    Points
    34

    Par défaut

    Petite remarque :
    Ne serait il pas intéressant dans le fichier model_xxx d'avoir une méthode deleteById en standard ?

  5. #5
    Nouveau membre du Club
    Homme Profil pro
    Directeur des systèmes d'information
    Inscrit en
    novembre 2002
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Directeur des systèmes d'information

    Informations forums :
    Inscription : novembre 2002
    Messages : 31
    Points : 34
    Points
    34

    Par défaut

    Pour compléter en esperant etre clair (ce n est pas evident)
    Lorsque je veux detruire un element fils (ie keywords) j'appelle dans le fichier edit.php de mon element pere la methode echo $oViewKeywords->show().
    Celle ci est parfaite et me permet de selection un element pour edit/delete ou show
    Lorsque j'appuie sur le bouton delete par exemple, le soft appelle Qryversions->delete() qui fonctionne bien hormis le fait que je n'ai pas besoin de l'affichage avec la demande de confirmation.
    Et cerise sur le gateau je voudrais revenir à mon écran initial

  6. #6
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Vous pouvez, dans votre module appeler ces méthodes.

    model_maTable::getInstance()->deleteByQry ..

    Si c'est une suppression en cascade, vous pouvez simplifier en créant une méthode dans votre modèle qui fera les 2 requetes
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  7. #7
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Citation Envoyé par frederictb Voir le message
    Pour compléter en esperant etre clair (ce n est pas evident)
    Lorsque je veux detruire un element fils (ie keywords) j'appelle dans le fichier edit.php de mon element pere la methode echo $oViewKeywords->show().
    Celle ci est parfaite et me permet de selection un element pour edit/delete ou show
    Lorsque j'appuie sur le bouton delete par exemple, le soft appelle Qryversions->delete() qui fonctionne bien hormis le fait que je n'ai pas besoin de l'affichage avec la demande de confirmation.
    Et cerise sur le gateau je voudrais revenir à mon écran initial
    Vous pouvez faire cela en ajoutant une méthode _delete() comme suit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    public function _delete(){
      //votre code de delete
    
      //suivi d'un 
      _root::redirect('monModule::list');
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

  8. #8
    Rédacteur
    Avatar de imikado
    Homme Profil pro
    Ingénieur développement
    Inscrit en
    décembre 2006
    Messages
    4 814
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement
    Secteur : Finance

    Informations forums :
    Inscription : décembre 2006
    Messages : 4 814
    Points : 18 561
    Points
    18 561
    Billets dans le blog
    17

    Par défaut

    Citation Envoyé par frederictb Voir le message
    Petite remarque :
    Ne serait il pas intéressant dans le fichier model_xxx d'avoir une méthode deleteById en standard ?
    Oui pourquoi pas, en attendant que je le mette sur le svn général, vous pouvez l'ajouter dans module/mods/all/model/src/model_example.sample.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    <?php
    class model_#maTable# extends abstract_model{
    	
    	protected $sClassRow='row_#maTable#';
    	
    	protected $sTable='#maTable#';
    	protected $sConfig='#maConfig#';
    	
    	protected $tId=array('#maTable_id#');
    
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
    
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE #maTable_id#=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
    	
    	#modelMethods#
    	#modelSaveDuplicateKey#
    
    }
    Vous pouvez ajouter la méthode suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    <?php
    class model_#maTable# extends abstract_model{
    	
    	protected $sClassRow='row_#maTable#';
    	
    	protected $sTable='#maTable#';
    	protected $sConfig='#maConfig#';
    	
    	protected $tId=array('#maTable_id#');
    
    	public static function getInstance(){
    		return self::_getInstance(__CLASS__);
    	}
    
    	public function findById($uId){
    		return $this->findOne('SELECT * FROM '.$this->sTable.' WHERE #maTable_id#=?',$uId );
    	}
    	public function findAll(){
    		return $this->findMany('SELECT * FROM '.$this->sTable);
    	}
            public function deleteById($uId){
    		return $this->findOne('DELETE  FROM '.$this->sTable.' WHERE #maTable_id#=?',$uId );
    	}
    	
    	#modelMethods#
    	#modelSaveDuplicateKey#
    
    }
    Framework php sécurisé et simple à prendre en main avec générateur web http://mkframework.com/ (hebergé sur developpez.com)
    Mes cours/tutoriaux

Discussions similaires

  1. Réponses: 1
    Dernier message: 03/03/2015, 15h47
  2. [XL-2010] erreur 1004 methode delete classe range échouée
    Par emi81 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 13/03/2013, 17h50
  3. methode delete qui ne delete pas
    Par chady dans le forum Hibernate
    Réponses: 2
    Dernier message: 10/02/2009, 20h56
  4. ObjectDataSource et Method Delete
    Par Mandotnet dans le forum ASP.NET
    Réponses: 2
    Dernier message: 04/04/2008, 15h32
  5. [TableAdapter] probleme avec la methode DELETE
    Par drayif dans le forum Accès aux données
    Réponses: 7
    Dernier message: 05/07/2007, 14h46

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