Hallo.....
Ich arbeite gerade an einem eigenen Modul. Nun ist hierfür die Verwaltung einer N zu N Datenbank nötig. Gibt es ein Mode um diese Datensätze zu administrieren?
Oder ein gutes Plug oder irgendwas? :-)
Grüsse und danke
Hallo.....
Ich arbeite gerade an einem eigenen Modul. Nun ist hierfür die Verwaltung einer N zu N Datenbank nötig. Gibt es ein Mode um diese Datensätze zu administrieren?
Oder ein gutes Plug oder irgendwas? :-)
Grüsse und danke
Contao kennt n:n nicht
Was willst Du denn genau machen?
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
Moin,
Sorry, Toflar, aber das ist so nicht richtig. TL/Contao kennt sehr wohl N:M Beziehungen und nutzt diese bereits im Core. Siehe als Beispiel die Beziehung zwischen 'tl_user' und 'tl_user_group' (rosa in der Mitte des Diagramms, bzw. den Thread "ER Modell der Typoligth DB"): jede "User Group" hat keine bis viele "User", jeder "User" kann in keiner bis vielen "User Groups" sein.
Richtig ist aber, dass TL/Contao N:M Beziehungen nicht "klassisch"/wie üblich mit einer Hilfstabelle abbildet, sondern stattdessen in einem BLOB-Feld einer der beiden beteiligten Tabellen ein serialisiertes Array mit den Schlüsseln/IDs der anderen Tabelle speichert. Bei "User" N:M "User Group" wird dazu das Feld "tl_user.groups" genutzt.
Logisch verwaltet TL/Contao N:M also durchaus, jedoch kann man nicht "klassisch" per SQL einen JOIN formulieren, sondern muss die Verknüpfungen per PHP realisieren (siehe aber auch Leos Hinweis im obigen Thread).
Ja, das müsste man wissen, um z.B. zu entscheiden, auf welcher Seite der Relation das BLOB-Feld/serialisierte Array gehalten wird.
Ich erinnere auch daran, dass in den meisten Fällen eine N:M Beziehung in der Datenbank (sinnvoll) degeneriert zu einer 1:N Beziehung im Userinterface.
- In einer Liste von Benutzern wird die Zugehörigkeit zu Benutzergruppen als Liste von Gruppen beim jeweiligen Benutzer angezeigt (z.B. Komma separiert). Bearbeitet man einen Benutzer, dann gibt es für die Zuordnung zu Benutzergruppen typisch ein mehrzeiliges Select-Feld bzw. eine Checkbox-Gruppe. 1 Benutzer -> 0 bis viele Gruppen.
- In einer Liste von Benutzerngruppen werden die zugeordneten Benutzer als Liste angezeigt (z.B. Komma separiert). Bearbeitet man eine Gruppe, dann gibt es für die Zuordnung zu Benutzern typisch ein mehrzeiliges Select-Feld bzw. eine Checkbox-Gruppe. 1 Gruppe -> 0 bis viele Benutzer.
Eine noch gerade brauchbare Alternative der Darstellung, die N:M direkt visualisiert, wäre eine Matrix von "X"/Checkboxen ... sofern eine der beiden Tabellen nur wenige Datensätze hat (für die Spalten, damit die Darstellung in der Breite akzeptabel ist). Oder übersehe ich hier gerade irgend ein tolles Userinterface?
Falls nicht: ich sehe N:M Beziehungen als absolut notwendiges Hilfsmittel für die DB an (auch incl. zusätzlicher Attribute an der N:M Beziehung, bei TL in Form von weiteren Elementen im serialisierten Array machbar) ... aber im Userinterface bzw. für den normalen Bediener wird das gar nicht erkennbar.
LG, Georg
Ich möchte hier nur kurz erwähnen: Falls es nötig ist, lassen sich N:N Beziehungen auch mit Zwischentabellen in TYPOlight realisieren - es ist einfach manueller Entwicklungsaufwand (load_callback, save_callback) nötig.
terminal42 gmbh
Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
Ich habe gerade ein Modul associategroups ins Repository gestellt, mit dem eine Verknüpfungstabelle für Gruppen angelegt wird.
terminal42 gmbh
Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle
Moin,
Ah, toll, danke. Getestet habe ich noch nicht, aber aus dem Code lese ich heraus, dass diese Erweiterung die beiden N:M Zwischentabellen tl_member_to_group (Frontend) und tl_user_to_group (Backend) zusätzlich zum 'normalen' TL/Contao Mechanismus befüllt. Der Core und existierende Erweiterungen sind also völlig unabhängig davon, aber neue Erweiterungen können davon Gebrauch machen und sehr effizient mit purem SQL JOIN die Beziehungen abfragen. Sehr nützlich/effizient, falls man z.B. sehr viele Frontend-Mitglieder hat und, ausgehend von einer Gruppe, bestimmte Mitglieder herausfiltern will.
Und ein schönes Lehrstück, wie man "klassische" N:M Beziehungen in TL/Contao haben kann.
LG, Georg
Genau so ist es. Es ist natürlich wie immer aus einem Auftrag entstanden, ich bin gerade an einer Mitgliederliste die per Gruppe gefiltert werden kann
Das einzige Problem welches ich sehe (und noch nicht lösen konnte) ist, wenn jemand direkt in die Datenbank schreibt... Aber der Core macht das nicht, und jede andere Erweiterung müsste halt Rücksicht nehmen.
terminal42 gmbh
Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle
Ich versuche gerade dies umzusetzen. Habe aber da noch Schwierigkeiten.
Leider versucht Contao nach dem Absenden des Formulars die Daten in die Tabelle zuspeichern. Da aber das Feld dort natürlich nicht vorhanden ist, wird eine Exception aufgeworfen.
Wie also kann ich verhindern, dass das Feld nicht abgespeichert wird?
terminal42 gmbh
Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle
Vielen Dank. Wäre ich glaub nie drauf gekommen
@andreas.schempp:
Danke für das Modul! Hab einiges dadurch gelernt
Hier nochmals eine DB-Übersicht, falls es interessiert: http://www.contao.org/blog-leser/ite...ntao-core.html
Die "fehlerhaften" N:M Beziehungen sind mit roter Feldtyp-Beschreibung markiert.
terminal42 gmbh
Wir sind Contao Premium-Partner! Für Modulwünsche oder Programmierungen kannst du uns gerne kontaktieren.
Hilfe für Isotope eCommerce kann man auch kaufen: Isotope Circle
Sorry das ich den Thread noch einmal ausgraben muss, hab mir auch einmal das Modul installiert. Jedoch zeigt mir das Installtool nicht die gewünschten DB Erweiterungen an, die das Modul mitführt.
Ich hab zudem noch eine Frage zu N:M Darstellungen in Contao:
Die Ansicht im BE wird quasi zur Zeit immer aufgeblasen? Also habe ich zum Beispiel 100 Gruppen, dann werden mir diese 100 Gruppen in der Benutzermaske komplett mit einer checkboxliste angezeigt?
Wenn ja, gibt es Möglichkeiten dies anders darzustellen?
Klar gibt es die Du nimmst dann eben halt nicht das Checkbox-Widget sondern irgendwas geeigneteres
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
was wäre denn bei einerm n:m verknüpfung mit mehreren 100 Einträgen geeigneter als checkbox? Schön wäre es eine Art Filetree Widget zu haben, was sich anhand einiger DB Einträge Aufbauen lässt, oder ein Widget über den ich Filter und Suchmöglichkeiten habe, welche sich dann in einer Paginationliste mit checkboxeinträgen wiederspiegelt, und nur eine MAX ANzahl an Einträgen anzeigt, wie es im BE selbst der Fall ist. Da habe ich ja auch oben die Möglichkeit Filter einzublenden und nach Einträgen zu Suchen. Maximal werden dann default 500 Einträge angezeigt.
Sowas gibt es alles, bist ja nicht der erste, der über solche Probleme stolpert
Im ER gibt's etliche Widgets und ansonsten bleibt immer noch die Möglichkeit, selber was geeignetes zu schreiben
Contao Core-Entwickler @terminal42 gmbh
Wir sind Contao Premium-Partner!
Für Individuallösungen kannst du uns gerne kontaktieren.
PS: Heute schon getrakked?
Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)
Lesezeichen