Quick links: Content - sections - sub sections
EN FR
Quick Search Advanced search
 
Page

  [Opened] CRUD pour table de jonction

Posted by RaphaelW on 08/27/2010 16:32

Bonjour

J'ai remarqué qu'un problème récurrent concernant les dao et autre crud dans jelix concernait 2 tables reliées par une 3eme table de jonction.

Je me suis créé un petit contrôleur de quelques lignes qui étend le crud de jelix et qui règle cela. J'aimerais le proposer à la communauté pour apporter ma petite pierre à l'édifice et histoire de voir si des améliorations sont possibles.

Cela vous semble-t-il utile ou pas ? quelle forme cela pourrait prendre ?

Ciao

  [Opened] CRUD pour table de jonction

Reply #1 Posted by laurentj on 08/27/2010 18:52

Salut,

J'ai du mal à voir un crud spécifique pour ça. Ça donne quoi concretement ? On édite quoi exactement ? Tu peux donner un exemple concret ?

  [Opened] CRUD pour table de jonction

Reply #2 Posted by RaphaelW on 08/27/2010 19:28

Une situation simple serait une liste d'articles que tu veux classer par catégories. Un article pouvant être associé à plusieurs catégories (et réciproquement). Tu peux donc vouloir éditer un article donné et choisir toutes les catégories dans le formulaire de l'article ou alors éditer une catégorie et choisir les articles associés dans le formulaire de la catégorie. c'est un genre de système de tags mais c'est pour l'exemple.

Voici par exemple le crud que j'ai créé pour gérer des évenements :

class eventsCtrl extends jctCtrl {
<code>
  protected $dao = 'admin~events';
  protected $form = 'admin~events';
  protected $jonctionDao = 'admin~tags_events';
  protected $primaryKeys = array('id_event', 'id_tag'); // l'ordre est important ici
  protected $control = 'id_tag';
  protected $propertiesForList = array('id_event','titre','organisateur','lieu','public');

}

class tagsCtrl extends jctCtrl {

  protected $dao = 'admin~tags';
  protected $form = 'admin~tags';
  protected $jonctionDao = 'admin~tags_events';
  protected $primaryKeys = array('id_tag', 'id_event'); // l'ordre est important ici
  protected $control = 'id_event';
  protected $propertiesForList = array('id_tag','name');

}

class jctCtrl extends jControllerDaoCrud {

  protected $jctDao ;
  protected $primaryKeys;
  protected $control ;
	
	
  protected function _preUpdate($form) {
    $form->initControlFromDao($this->control, $this->jctDao, null, $this->primaryKeys);
  }

  protected function _afterCreate($form, $id, $resp) {
    $form->saveControlToDao($this->control, $this->jctDao, $id, $this->primaryKeys);
    return true;
  }
	
  protected function _afterUpdate($form, $id, $resp) {
    $form->saveControlToDao($this->control, $this->jctDao, $id, $this->primaryKeys);
    return true;
  }

  protected function _view($form, $resp, $tpl) {
    $form->initControlFromDao($this->control, $this->jctDao, null, $this->primaryKeys);
  }
	
  protected function _delete($id, $resp) {
    $conditions = jDao::createConditions();
    $conditions->addCondition($this->primaryKeys[0],'=',$id);
    $dao = jDao::get($this->jctDao);
    $dao->deleteBy($conditions);
    return true;
  }

}</code>

Ca ne mange pas de pain mais pour ma situation c'est utile. Il faut également ajouter des checkboxes avec datasource pour chacun des deux formulaires.

  [Opened] CRUD pour table de jonction

Reply #3 Posted by laurentj on 09/06/2010 13:57

Ok je comprend mieux.

Ceci dit, je n'incluerai pas ce genre de contrôleur dans jelix, puisqu'il s'agit finalement d'un cas spécifique, et pas général. Je pourrais avoir plusieurs contrôles à initialiser et à sauver avec initControlFromDao/saveControlToDao. Avoir à faire bien d'autres choses dans les méthodes que tu as surchargé.

Cependant ta façon de faire est la bonne :)

  [Opened] CRUD pour table de jonction

Reply #4 Posted by RaphaelW on 09/07/2010 14:42

En fait il ne s'agissait pas de l'inclure, c'est juste une solution à un problème. je me demande s'il ne serait pas intéressant d'avoir quelque part un répertoire pour référencer des solutions, des astuces, etc.

  [Opened] CRUD pour table de jonction

Reply #5 Posted by foxmask on 09/07/2010 16:52

on a ce projet là en cours mais pas le temps/les bras pour le monter.


@GitHub - Forum HaveFnuBB! powered by Jelix - Le Booster Jelix !

 
Page
  1. CRUD pour table de jonction