ORM: Through-Relationships

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • ORM: Through-Relationships

    Hallo,

    Ich bins mal wieder mit einer Sache die ich anscheinend nicht verstehe. Ich möchte folgende Tabellen mit Relationships richtig verknüpfen:
    users (für Benutzer)
    usergroups (für Benutzergruppen)
    rights (für Rechte)
    enrollments (für die Verknüpfungen)

    Jeder User kann mehrere Benutzergruppen haben und umgekehrt, und jede Benutzergruppe kann mehrere Rechte haben und umgekehrt.
    In der Enrollments-Tabelle gibt es die Spalten "user_id", "usergroup_id" und "right_id" wobei in einem Datensatz zur Verknüpfung höchstens "user_id" und "usergroup_id" oder "usergroup_id" und "right_id" genutzt wird.
    Nur bin ich mittlerweile irgendwie komplett verwirrt von dem ganzen und verstehe nicht was jetzt wo und wie zu was belong_to braucht und has_many hat.

    Später will ich einfach die Rechte von Benutzergruppen ($usergroup->rights), die Benutzer von Benutzergruppen ($usergroup->users), die Benutzergruppen von Benutzern ($user->usergroups) und die Rechte von Benutzern ($user->rights) abrufen können.
    Ich hoffe jemand kann mir das ganze Erklären.

    Als ORM-Klasse nutze ich übrigens das ORM-Modul von Kohana 3.

    Vielen Dank im Voraus!

    greez

    bitsnack
  • Ich habe nun nicht wirklich Ahnung von Kohana aber der User Guide ist dahingehend recht verständlich.
    Da ich an deiner Stelle die Beziehungen Benutzer-Benutzergruppen und Benutzergruppen-Rechte voneinander trennen würde, gehe ich nur auf ersteres ein. Die folgenden Zeilen werden jeweils dem entsprechenden Models hinzugefügt:

    Quellcode

    1. # user
    2. protected $_has_many = array('usergroups' => array('through' => 'relations_user_usergroups'));
    3. # usergroups
    4. protected $_has_many = array('user' => array('through' => 'relations_user_usergroups'));
    5. # relations_user_usergrouos
    6. protected $_belongs_to = array('user' => array(), 'usergroups' => array());

    Die Tabelle relations_user_usergroups benötigt nun lediglich die Spalten »user_id« und »usergroup_id«. Auf die Gruppen eines Benutzers greifst du mit $user->usergroups->find_all() zu.
  • Soweit hab ich das auch. Aber wie Verknüpfe ich jetzt die Rechte mit den Benutzern?
    Geht das überhaupt mit mehreren Usergroups? Wenn nicht, wie würde das mit nur einer Usergroup aussehen.
    Momentan fehlt mir einfach das Verständnis der Through-Relationships, unteranderem deshalb weil im Userguide steht dass man ein Model für die Verknüpfungstabelle braucht, indem belong_to etc steht, wenn ich das Model aber lösche funktioniert es genau gleich. Ich bin etwas verwirrt.
  • Mir gefällt das Kohana Framework. Vor allem das ORM Modell sieht dem ziemlich ähnlich, was wir proprietär in der Firma einsetzen. Fehlen nur noch eine Cache Ebene und Master/Slave Support.

    Aber mir ist gerade aufgefallen, dass das Kohana Framework auch wenn oft so angepriesen kein OpenSource Framework ist.. das solltest du bei deinem Projekt beachten.
    Ich finds schade :( Das Framework ist fast OpenSource - warum macht mans nicht zu 100% OpenSource?
    Wenn die Weiterentwicklung gegen deine Bedürfnisse laufen würde, dürftest du so z.B. nicht forken.