Insertion/suppression de relations lors d'une sauvegarde

Réduire
X
 
  • Filtrer
  • Heure
  • Afficher
Tout effacer
nouveaux messages

  • [RÉGLÉ] Insertion/suppression de relations lors d'une sauvegarde

    Bonjour,

    Je suis en train de développer un composant pour Joomla! 2.5 et je bloque sur un point. Voici un mini schéma de mon modèle :

    TABLE_A --- REL(N-N) --- TABLE_B

    Voilà, du coup, lors de l'ajout ou la modification d'un élément dans la table TABLE_A, je souhaiterais mettre à jour (donc ajouter ou supprimer) les liens avec la TABLE_B.

    Dans mon form, je souhaiterais avoir une liste à choix multiple et lorsque je clique sur enregistrer, enregistrer d'abord l'élément dans TABLE_A, puis récupérer l'ID qui vient d'être crée ou modifié, puis supprimer les liens obsolètes et ajouter les nouveaux.

    Voilà, j'espère que je suis assez clair ... Sauriez vous m'aiguiller vers une doc, ou une piste me permettant d'avancer ?

    Merci d'avance pour vos réponses.
    Dernière édition par ElGringoTom à 03/01/2013, 17h49

  • #2
    Re : Insertion/suppression de relations lors d'une sauvegarde

    Bonjour,

    C'est pas très clair ton explication.

    Si j'ai a peut près compris, tout ce passe dans ton modele.
    Je pense que dans ton cas il faut surcharger la méthode save dans ton modèle:
    Code:
    public function save($data){
       if(parent::save($data)){ //Si la sauvegarde dans la table a a bien marché
           //Ici les modifications dans la table B
       }
    }
    Normalement $data['id'] contient ton id de la table A si id a été utilisé comme identifiant.
    Il ne te reste plus qu'a faire une petite requete sql ou alors appeler un autre modèle.

    Si tout ça te semble flou: http://docs.joomla.org/Developing_a_...5/Introduction

    Damien
    www.Crac-Design.com

    Commentaire


    • #3
      Re : Insertion/suppression de relations lors d'une sauvegarde

      Bonjour,

      Tout d'abord, merci pour ta réponse et le lien. Je suis justement ce tuto pour avancer. J'ai tout fait jusqu'au chapitre "Adding backend actions". Je vais essayer de clarifier un peu :

      J'ai donc un composant qui utilise déjà plusieurs tables de mon modèle. Pour chacune des tables, un triplet model/view/controller me permet d'insérer/éditer mes données via l'interface d'administration. J'ai créé quelques fields aussi pour ajouter à mes forms des listes déroulantes qui vont chercher des données d'autres table pour les clé étrangères.

      Jusque là tout va bien car tout est (presque) automatique ; en mettant les bons noms de model/view/controller, joomla fait le boulot quasi tout seul.

      Là où je sèche c'est sur l'utilisation au sein d'une view, de plusieurs models, plusieurs forms ...

      En détail :

      J'ai une liste de collections, je clique sur un item et là j'ai mon formulaire rempli avec les bonnes infos et les bon liens via les clé étrangères (pour les relation 1-n).

      Par contre pour chaque collection sont associées une ou plusieurs espèces et inversement. Du coup, entre la table collection et espèce j'ai une table de relation.

      Au chargement du formulaire, il faudrait dans un premier temps sélectionner les espèces présentes pour cette collection (donc tout les liens COL_ID=XX ESP_ID dans la relation) dans ma liste à choix multiples.

      ==> J'imagine que pour cela, je dois lier plusieurs modèles à ma view. J'ai vu quelques bout de code indiquant qu'il faut faire ce lien dans le controller (http://docs.joomla.org/Using_multipl..._MVC_component)
      Mais je ne sais pas dans quelle fonction de mon controller ajouter ça (sachant que là où j'en suis dans le tuto, mon controller est juste une classe vide).
      Et après, comment charger les données dans le bon composant sachant que pour le moment tout est automatiquement fait dans mon code.
      En gros quel est le cheminent du controller jusqu'à l'affichage de mes données.

      A l'enregistrement du formulaire, il faudrait donc supprimer les liens obsolètes puis créer les nouveaux.

      => effecivement je suis d'accord avec toi, je pense aussi qu'il faudrait surcharger la méthode save. Seulement d'ici, il faut appeler une méthode d'un autre modèle qui sera chargé d’exécuter les requêtes adéquates.
      Comment faire ces appels ? Et comment, depuis le controller, récupérer les données de mon formulaire pour construire ma requête ?

      Voilà. Pour terminer, après avoir suivi ce tuto (que je trouve trop directif), j'ai pu avancer, mais ne comprends pas encore toute la logique de l’architecture MVC, ni comment goupiller tout ça sous Joomla! Il me manque la compréhension de certains points pour avancer plus.

      Bref j'espère être plus clair, je sais que ce n'est évident par message interposé d'expliquer tout ça, mais toute aide sera bienvenue.

      Merci à tous.

      Commentaire


      • #4
        Re : Insertion/suppression de relations lors d'une sauvegarde

        tout d'abord, je ne suis pas un grand spécialiste mais j'ai peut-être une idée pour toi :

        d'après ce j'ai compris tu as des collections liées à des espèces et une table de relation qui te permet d'avoir des liens multiples entre espèces et collections (plusieurs espèces dans plusieurs collections)

        dans ton form, tu as un sélecteur collections, quand une collection est sélectionnée, tu mets à jour une liste à choix multiple en ajax je suppose ?

        tu as toutes tes espèces avec une coche devant celles faisant partie de la collection sélectionnée

        c'est ça?

        combien as tu d'espèces et de collections dans tes tables?
        Christophe
        http://www.webcrea.fr

        Commentaire


        • #5
          Re : Insertion/suppression de relations lors d'une sauvegarde

          Bonjour,

          Alors pour une collection, un formulaire avec plusieurs champs (contenus dans la table collection) et une boîte à choix multiple (une liste avec scollbar) de toutes les espèces (effectivement, il faudra prévoir un rafraîchissement de cette boîte en fonction de la sélection d'autres paramètres du formulaire ... )
          L'idée serait de sélectionner les espèces à l'aide de la touche ctrl et du clique.
          Pour ce qui est de la volumétrie, je dirais que ça ne dépassera jamais 100 collections et peut être 200 espèces ...

          Commentaire


          • #6
            Re : Insertion/suppression de relations lors d'une sauvegarde

            Alors deux solutions mais qui se codent de la même manière,

            Tu fais tout pareil sauf que tu vires ta table de relations qui va te compliquer la vie, surtout si tu commences sur Joomla.
            Tu crées un champ espèces dans ta table collection et tu enregistres sous forme json tes espèces sélectionnées.
            Il faut jusque que tu surcharges ta méthode save() de ton modèle comme je l'ai mis dans mon premier message pour transformer ton $data['especes'] en json.

            Sinon tu gardes ta table de relations et tu surcharges toujours la methode save() de ton modèle ou tu vas insérer tes requêtes sql de relations.
            Le plus simple étant dans un premier temps de supprimer toutes les relation puis de les recréer.

            Ensuite pour t'éclairer sur tes questions:
            Tout ce que tu veux faire va se passer dans le modèle, il sert à faire le traitement des données.
            Le contrôleur lui va simplement se charger d'appeler le modèle et lui dire de sauvegarder, tu n'as pas grand chose à faire la dedans.

            En fait de mémoire ton controlleur est vide de code mais il est déjà pourvu de plein de méthodes venant de son parent JModelAdmin à mon avis.

            Comme je le dis souvent, il faut bien comprendre le fonctionnement de Joomla et pour ça il n'y a pas 36 solutions.
            Tu prends un IDE qui va bien (netbeans dans mon cas) et d'un simple clic tu peux navigueur dans les classes, leurs parents, surcharges...
            Ensuite il faut pour comprendre le cheminement se taper quelques modes pas à pas en prenant bien le temps de voir par quels fichiers tu passes.

            J'avais trouvé un beau schéma du MVC Joomla mais je le trouve plus. Si ça me revient je le poste.

            Damien
            www.Crac-Design.com

            Commentaire


            • #7
              Re : Insertion/suppression de relations lors d'une sauvegarde

              Ça y est, je viens juste de terminer !

              J'ai finalement réussi en conservant la table de relation, en modifiant le save pour y appeler une fonction d'un autre modèle qui fait la suppression/ajout des lignes de relation.

              Puis pour le chargement du formulaire, j'ai un peu ramé pour afficher correctement et mettre en surbrillance les éléments dans mon JFormFieldList. J'ai du surchargé le load de ma table pour modifier la requête puis rajouter une petite ligne dans mon field pour splitter mon résultat.

              Et du coup, j'ai même appris comment afficher des messages de debug, quand parfois un simple echo ne fonctionne pas C'est quand même vachement plus simple avec ça ...

              Bref, merci beaucoup pour votre aide qui m'a été bien utile. Je passe le sujet en résolu !

              Commentaire

              Annonce

              Réduire
              Aucune annonce pour le moment.

              Partenaire de l'association

              Réduire

              Hébergeur Web PlanetHoster
              Travaille ...
              X