Carnet Web de Bastien Jaillot

Gérer une table de jointures super facilement avec Jelix

Note publiée le .

logo_jelix_moyen.pngJe ne l'ai pas encore dit publiquement, mais je suis maintenant un grand amateur du framework PHP5 Jelix. Ce framework est principalement développé par Laurent Jouanneau (son blog) qui est une des personnes que je suis depuis longtemps en cachette et avec qui j'apprécie maintenant de voir l'efficacité au quotidien.

Jelix, c'est redoutable !

Tenez, j'ai récemment eu un problème avec une table de jointure. J'ai trois tables : ressource, typeRessource et cleRessource. La dernière est composé de clés des deux premières.

L'interface ressemble à :

listemenu.png

Moi tout bêtement, pour enregistrer le tout je code ça (à la va vite sans aucune sûreté pour le moment) :

[PHP]
// instanciation de la factory
$maFactory = jDao::get($this->dao_cleRessource);

// recupération des données sélectionnées
$array_type_sel = $form->getData("typeressource");

// boucle sur tous les ids sélectionnés.
foreach ($array_type_sel as $id_type)
{
	// création d'un record correspondant au dao foo
	$record = jDao::createRecord($this->dao_cleRessource);

	// on remplie le record
	$record->id_typeRessource = $id_type;
	$record->code_Ressource = $id;

	// on le sauvegarde dans la base
	$maFactory->insert($record);

}

Mais non, il suffisait de faire ça :

[PHP]
$form->saveControlToDao("typeressource",$this->dao_cleRessource, $id,array("code_Ressource", "id_typeRessource"));

Bon d'accord ce n'est pas non plus la ligne la plus facile à deviner mais wauow ! UNE LIGNE !

Pour charger les valeurs sélectionnées quand on est en mode vue ou édition du formulaire, il suffit de :

[PHP]
$form->initControlFromDao("typeressource", $this->dao_cleRessource, $form->id, array("code_Ressource", "id_typeRessource"));

Vu que dans mes projets j'ai forcément plein de tables de jointure, ça va me faciliter la vie de manière exceptionnelle.

Pour info, pour charger le contenu de

A venir, de nombreux mini-tutos sur l'utilisation de Jelix.

Bon code, je m'en vais ne pas écrire des tonnes de lignes de code à tout va :p.