Zum Inhalt springen

Bug in class.t3lib_loaddbgroup.php oder in meinem Kopf?

Erstellt am 28. Februar 2008 · 4 Antworten · letzte Antwort am 2. Juni 2008

Tags: TCA, Datenbank, Frage

muckelzwerg ·

Hallo,

ich habe mit dem Kickstarter eine Tabelle mit einem Relationsfeld
und echter MM Relation angelegt.
Die Assoziativtabelle wurde angelegt und funktioniert auch.
Dann wollte ich aus der Zieltabelle ebenfalls die Relationen
bearbeiten können. Also hab ich das entsprechende Feld nach der Doku
angepasst.
MM => "gleicher tabellenname"
MM_opposite_field" => "feldname aus der basistabelle"
Sobald ich das verwende bekomme ich im Backend einen SQL Fehler.
Der Fehler geht zurück auf die Funktionen
"readMM()" und "writeMM()" in der Datei
class.t3lib_loaddbgroup.php
(Zeile 270 und 330)
In diesen Funktionen wird unterschieden, ob "vorwärts" oder "rückwärts" auf die Assoziativtabelle zugegriffen wird.
Bei Rückwärtszugriff werden die UIDs getauscht, damit die Assoziativtabelle richtigherum geschrieben wird.
Ebenfalls wird dabei die Sortierklausel gesetzt.
Und da knirscht es.
es gibt die Varianten:
$sorting_field = 'sorting_foreign';
$sorting_field = 'sorting';
Die jeweils das Sortierfeld der Ass.Tabelle angeben.
Jetzt gibt es einiges Hin und Her mit der Benennung des Sortierfeldes.
In der Doku ist es mit "sorting" bezeichnet und auch der Kickstarter nennt es so.
In den Bugreports etc.findet man, dass bei Typo3 4.1.x das Feld aber "sorting_foreign" heißen muss.
Es ist aber letztlich egal, wie ich das Feld in der Tabelle benenne, der Zugriff geht immer bei einer Variante schief.
Heißt das Feld "sorting", gehen die Rückwärtszugriffe nicht
(weil dann "sorting_foreign" gesetzt wird).
Heißt es "sorting_foreign" gehen logischerweise die Vorwärtszugriffe nicht.
Setze ich $sorting bei beiden Varianten gleich (und bennen die Tabelle entsprechend) funktionieren beide Zugriffsarten,
und auch die Vertauschung der IDs etc. funktioniert.

Hab ich was falsch konfiguriert?
(ist eigentlich unwahrscheinlich, weil die Werte ja hardcoded sind)

Ist das ein Bug?
Wenn ja, wieso findet man dazu nichts? In allen Versionen bis hoch zur 4.2beta ist dieser Eintrag enthalten.
Entweder ich mach was falsch, oder bei keinem Nutzer funzen die MM Tabellen?

mfG

-- -- muckelzwerg

muckelzwerg ·

Neue Erkenntnis: Verwendet man beide Sortierfelder in der Assoziativtabelle,
funktioniert die Anwendung ebenfalls.
Zusätzlich können dann aber die Sortierreihenfolgen aus Sicht der lokalen und der
entfernten Tabelle gespeichert werden.
Das erscheint mir momentan noch am sinnvollsten, da die Reihenfolge der Referenzen
ja nicht aus beiden Sichten gleich sein muss.
Aber wo gibt es dazu Dokumentation?
In der Typo3 Core Documentation ist nur davon die Rede, dass "sorting"
ein Pflichtfeld ist. "sorting_foreign" wir in den Bugs und an einigen anderen
Stellen erwähnt, als "neuer Name". Beides ist unvollständig bzw. falsch?
Wo steht es denn richtig?

-- -- muckelzwerg

jochen.​biedermann ·

Ich habe genau das gleiche Problem. Aber deine "Lösung" kann doch nicht wirklich die einzige möglichkeit sein. Biste Du da schon weiter gekommen?

Bis denne, Jochen

jenses ·

Ich vermute mal ganz einfach,
daß der Weg der Wahl über IRRE laufen soll,
und daß die genannten Funktionen einfach nur Leichen sind,
die noch keiner der Core-Entwickler beseitigt hat.

In der CoreAPI kann ich auch keinen Treffer zu "MM_opposite_field" finden...

froemken ·

In den IRRE-Docs werden die MM-Tabellen manuell angelegt. Du musst Dir mit dem Kickstarter eine eigene Tabelle_rel erstellen mit den entsprechenden Feldern. Im Kickstarter brauchst du auch nicht das sorting aktivieren, dass machst du dann über dieses foreign_sorting. Das Feld für die Sortierung musst du dann natürlich auch manuell mit in die Tabelle_rel aufnehmen.

IRRE macht ja "Werbung" dafür, dass es nun endlich möglich ist auch die MM-Tabellen zu bearbeiten. Das geht aber nur, wenn man sie selbst anlegt und nicht automatisch mit der Checkbox "True MM-Relation" erzeugen lässt.

Hoffe Dich wenigstens einigermaßen verstanden zu haben...

froemken