- 1
[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
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
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
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
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
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 !
- 1