[PHP]Arbre d'objet et recherche d'objets
Bonjour,
Cela fait trois jour que j'essaye de trouver un moyen d'effectuer une recherche dans un arbre d'objet.*
Je fais ceci en PHP et dans ma base, mes objets ce présente comme ceci :
Code:
1 2 3 4 5 6 7 8
|
CREATE TABLE `ELEMENT` (
`ID` varchar(255) collate latin1_general_ci NOT NULL,
`NOM` varchar(255) collate latin1_general_ci default NULL,
`DECLINAISON` varchar(255) collate latin1_general_ci default NULL,
`DESCRIPTION` text collate latin1_general_ci,
PRIMARY KEY (`ID`)
); |
Un Objet ayant un nom et une liste d'enfant de même type
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
|
class Element {
private $_dao; // objet
public $_id; // string
public $_nom; // string
public $_parent; // objet element
public $_declinaison; // id de l'objet parent
public $_description;
public $_enfant;
public function __construct($donnees = null, $parent = null,$filtre=null) {
// si $donnees (reponse SQL), je récupère les élément id, nom, declinaison et description
// si $parent, je récupère parent
// avec $_dao, je recherche les enfants avec getElements($this, $filtre)
}
... |
Lorsque je fais une recherche filtrée (sur le nom de type nom = %filtre%), je fais une recherche en spécifiant les éléments racines, leur fils et leur petit fils. Pour pouvoir remonter un élément qui peut ne pas correspondre mais qui peut avoir un fils (ou petit fils) correspondant et ne remontant que les éléments respectant ce critère.
Code:
1 2 3 4 5 6 7 8 9
|
class Dao{
public function getElements($parent = null,$filtre=null) {
// je fais une recherche sur la table Element
// si j'ai un filtre je fais une jointure pour avoir les fils et les petit fils
// si j'ai un parent, je cherche les filles (declinaison = id du parent)
// si j'ai un filtre je recherche un element fils ayant un nom qui correspond au filtre (ou un de ces fils ou de ces petit fils
// je retourne la liste
} |
Bon, j'espère que mes explications ne sont pas trop confuse. Pour faire simple, j'essaye de filtré un arbre d’éléments en affichant uniquement les éléments correspondant au filtre et les parents de ceux-là. Tous ca en PHP.
Je n'arrive pas à voir comment je peux faire sans spécifier le niveau de recherche (ajouter des jointures pour les enfants et petit enfants). Comment je fais si j'ai des petit-petit fils ? Et lorsqu'un élément correspond aux critères, afficher tous ses fils et petits fils.
Est-ce que vous connaissez un paterne applicable en PHP ?
J'espère juste que je poste au bonne endroit.