Dans toute application web, nous avons souvent besoin de relations inter-table. Dans ce tuto nous allons voir les relations 1:1 en prenant par exemple un site sur une école.

Prennons la table élève, un élève possède un parrain, et un professeur est parrain au maximum d'un élève.

Voici en images les deux tables :

              

Elles restent relativement simple. Chaque personne (élève ou professeur) possède un identifiant, un nom et un identifiant qui permet de connaitre soit le parrain, soit le filleul.

Tout d'abord, nous devons créer les deux classes propres à chaque table.

class Eleve extends neko.db.Object {
    public var id : Int;
    public var nom : String;
    public var id_parrain : Int;
    static var TABLE_NAME = "Eleve";
    static var TABLE_IDS = ["id"];

    static function RELATIONS() {
        return[ {prop:"parrain", key:"id_parrain", manager:Professeur.manager} ];
    }
 
    private var parrain(dynamic, dynamic) : Professeur;
    public static var manager = new neko.db.Manager<Eleve>(Eleve);
}

class Professeur extends neko.db.Object {
    public var id : Int;
    public var nom : String;
    public var id_eleve : Int;
    static var TABLE_NAME = "Eleve";
    static var TABLE_IDS = ["id"];

    static function RELATIONS() {
        return[ {prop:"eleve", key:"id_eleve", manager:Eleve.manager} ];
    } 

    private var eleve(dynamic, dynamic) : Eleve;
    public static var manager = new neko.db.Manager<Professeur>(Professeur);
}

Voici quelques explications :

La fonction statique RELATIONS permet de créer une relation entre un élément de la table et un objet de la classe en utilisant un manager pour récupérer l'objet en question grâce à un identifiant.
Soient : 
  • prop : l'objet de retour, c'est à dire dans notre exemple, la variable parrain pour la classe Eleve, et la variable élève pour la classe Professeur.
  • key : l'identifiant de la base de donnés qui va permettre de faire la jointure (la clé étrangère).
  • manager : le manager de la classe qui va etre utilisé pour récupérer les données.

Dès lors, dans votre application vous pourrez récupérer les données de la sorte :
Pour avoir le nom du parrain d'un élève : 
var pers : Eleve = Eleve.manager.get(1);
trace("Le parrain de l'élève "+pers.nom+" est "+pers.parrain.nom);