Ergebnis 1 bis 13 von 13

Thema: MM 2.3 - Filter für ein Select/Tags in der Eingabe - Werte werden nicht gespeichert

  1. #1
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard MM 2.3 - Filter für ein Select/Tags in der Eingabe - Werte werden nicht gespeichert

    Hallo liebe Community,

    ich hänge mal wieder an einem MM-Problem.

    Ich habe eine Eltern- und eine Kindtabelle sowie eine unabhängige Tabelle, die via Select die Daten aus den beiden anderen Tabellen holt und eben eine Auswahl davon speichern soll. Die Elterntabelle heißt "Kategorien", die Kindtabelle "Unterkategorien". Natürlich möchte ich, dass während der Eingabe nur die relevanten Unterkategorien angezeigt werden soll, sobald eine Kategorie ausgewählt ist.

    Nach der Anleitung im MM-Handbuch habe ich in der Tabelle "Unterkategorien" einen Filter erstellt und diesen in der unabhängigen Tabelle beim Select-Attribut für die Unterkategorie ausgewählt. In der Eingabemaske ist beim Attribut "Kategorie" "Absenden bei Änderungen" aktiviert.

    Wenn ich jetzt einen neuen Eintrag mache und die Kategorie auswähle, lädt er kurz und zeigt mir dann nur die Unterkategorien an, die zur gewählten Kategorie gehören, soweit so gut.

    Allerdings speichert er den Wert für die Unterkategorie nicht. Die Unterkategorie ist ein filterbarer Wert, der Filter in der Listenansicht ist aber leer und wenn ich den Datensatz bearbeite, ist die Unterkategroie ebenfalls leer.

    Deaktiviere ich den Filter, wird brav gespeichert und beim Bearbeiten auch die Unterkategorie angezeigt.

    Was ist mir durch die Lappen gegangen?

    Der Vollständigkeit halber, das ist meine Filter-Regel:

    Code:
    SELECT unterkategorie.id FROM mm_markt_unterkategorie AS unterkategorie
    WHERE unterkategorie.pid IN (
        SELECT IF(
            {{param::post?name=category}} != 'NULL',
            (SELECT GROUP_CONCAT(kategorie.id) FROM mm_markt_kategorie AS kategorie
                WHERE kategorie.alias IN ({{param::post?name=category}}) GROUP BY kategorie.pid),
            (SELECT GROUP_CONCAT(rel.value_id) AS id FROM tl_metamodel_tag_relation AS rel
                WHERE rel.att_id = '18'
                AND rel.item_id = SUBSTRING_INDEX({{param::get?name=id}},'::',-1) GROUP BY rel.att_id)
        ) as id
    )
    VG
    Nicole

  2. #2
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    also in Deiner "unabhängige Tabelle" hast Du doch ein Attribut Select auf "Unterkategorie" - richtig?

    was ist dort bei dem Select "Alias" ausgewählt? das muss das ggf. gleich sein mit dem

    Code:
    SELECT unterkategorie.id
    wenn alias angewählt mal


    Code:
    SELECT unterkategorie.id, unterkategorie.alias
    oder nur


    Code:
    SELECT unterkategorie.alias
    testen (sofern Deine Alias -Spalte "alias" heisst)

  3. #3

  4. #4
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Hi zonky,

    entschuldige, habe seit dem Post nicht mehr an der Datenbank weitergearbeitet.

    Ja, in der unabhängigen Tabelle habe ich die Unterkategorie als Select eingefügt, genauso wie die Kategorie. Hier ein Screenshot der Konfiguration. 3 weitere zum Problem bei der Eingabe der Daten habe ich angehängt.

    MM_1.png

    Ich habe auch mal den Alias auf die ID gestellt, Verhalten ist gleich. Wenn ich im Filter das SELECT nur auf unterkategorie.alias stelle, gibt es keine Auswahl mehr im Feld der Unterkategorie.

    Das "SELECT unterkategorie.id, unterkategorie.alias" habe ich aktuell im "Eingabe"-Filter entsprechend eingefügt, merke aber keinen Unterschied zu der Variante nur mit der .id. So sieht der Filter aktuell aus:

    Code:
    SELECT unterkategorie.id, unterkategorie.alias FROM mm_markt_unterkategorie AS unterkategorie
    WHERE unterkategorie.pid IN (
        SELECT IF(
            {{param::post?name=category}} != 'NULL',
            (SELECT GROUP_CONCAT(kategorie.id) FROM mm_markt_kategorie AS kategorie
                WHERE kategorie.alias IN ({{param::post?name=category}}) GROUP BY kategorie.pid),
            (SELECT GROUP_CONCAT(rel.value_id) AS id FROM tl_metamodel_tag_relation AS rel
                WHERE rel.att_id = '18'
                AND rel.item_id = SUBSTRING_INDEX({{param::get?name=id}},'::',-1) GROUP BY rel.att_id)
        ) as id
    )
    Angehängte Grafiken Angehängte Grafiken

  5. #5
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    o.k. - damit kommen wir der Sache schon näher...

    Beim SELECT kannst Du wieder auf nur ID zurück gehen.

    Was mir erst bei den Bildern aufgefallen ist, dass Du ja mit Einzelauswahl [Select] arbeitetst - der Code ist aber für eine Mehrfachauswahl [Tags] und stammt sicher von hier aus dem HB

    da steht

    Bei der Eingrenzung einer Mehrfachauswahl muss man etwas tricksen, da die ...
    Der Grundaufbau ist schon korrekt mit

    Code:
    SELECT `id` FROM  mm_mitarbeiter
    
    WHERE IF (
    
          {{param::post?name=abteilung}} != 'NULL',
          (QUERY-P),
          (QUERY-G)
     )
    das Ganze könnte so i.E. aussehen
    Code:
    SELECT unterkategorie.id FROM mm_markt_unterkategorie AS unterkategorie
    WHERE IF (
        {{param::post?name=category}} != 'NULL',
        (unterkategorie.subcategory = {{param::post?name=category}}),
        (unterkategorie.subcategory = (
            SELECT markt.subcategory AS id
            FROM mm_markt AS markt
            WHERE markt.id = SUBSTRING_INDEX({{param::get?name=id}},'::',-1)
            LIMIT 1)
        )
    )
    Hinweis: bei einem Sub-Select und "=" immer ein LIMIT 1 mit angeben - wenn mehr als ein Rückgabewert, gibts ne Fehlermeldung

    Tipp 1: im Debugmodus kannst Du Dir bei Doctrine die Queries ansehen, die jeweils gezündet werden - mit Browsersuche nach "SELECT unterkategorie.id FROM mm_markt_unterkategorie AS unterkategorie" sollte das schnell zu finden sein

    Tipp 2: teste die Queries "QUERY-P" und "QUERY-G" vorher separat in phpMyAdmin o.ä.

  6. #6
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Danke zonky! Das war der richtige Hinweis! Dass sich das Beispiel nur auf Tags bezieht, hab ich tatsächlich nicht gemerkt.

    Ich habe es nun zum Laufen gebracht. Das Skript stelle ich der Vollständigkeit halber mit rein und eine wichtig Änderung musste ich noch machen: In der unabhängigen Tabelle musste ich bei der Kategorie die Alias-Spalte von "alias" auf "id" ändern, damit die Zuordnung mit der pid im Skript klappt. MM_5.png

    Mein "Eigenes SQL"-Filter:

    Code:
    SELECT unterkategorie.id FROM mm_markt_unterkategorie AS unterkategorie
    WHERE IF (
        {{param::post?name=category}} != 'NULL',
        unterkategorie.pid = {{param::post?name=category}},
        unterkategorie.pid = (
            SELECT markt.category
            FROM mm_markt_maschine AS markt
            WHERE markt.id = SUBSTRING_INDEX({{param::get?name=id}},'::',-1)
            LIMIT 1
        )
    )
    Again what learned.

    LG
    Nicole
    Geändert von Webstylerin (13.12.2023 um 08:11 Uhr)

  7. #7
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Webstylerin Beitrag anzeigen
    Das Skript stelle ich der Vollständigkeit halber mit rein und eine wichtig Änderung musste ich noch machen: In der unabhängigen Tabelle musste ich bei der Kategorie die Alias-Spalte von "alias" auf "id" ändern, damit die Zuordnung mit der pid im Skript klappt. MM_5.png

    Mein "Eigenes SQL"-Filter:

    Code:
    SELECT unterkategorie.id FROM mm_markt_unterkategorie AS unterkategorie
    WHERE IF (
        {{param::post?name=category}} != 'NULL',
        unterkategorie.pid = {{param::post?name=category}},
        unterkategorie.pid = (
            SELECT markt.category
            FROM mm_markt_maschine AS markt
            WHERE markt.id = SUBSTRING_INDEX({{param::get?name=id}},'::',-1)
            LIMIT 1
        )
    )
    Du meinst sicher "In der unabhängigen Tabelle" ...

    und "Zuordnung mit der pid im Skript klappt" für den Teil
    Code:
    unterkategorie.pid = {{param::post?name=category}},
    - richtig? ich nehme an, dass "{{param::post?name=category}}" den Aliasnamen enthielt - das kann man lösen, indem statt "{{param::post?name=category}}" man nochmal ein Sub-Select einbaut und mit dem Alias die passsende id holt

  8. #8
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    Du meinst sicher "In der unabhängigen Tabelle" ...
    Nein, in der unabhängigen.

    Ich habe eine DB names "mm_markt_maschine", diese enthält verschiedenste Infos und darunter auch die Select-Felder für die Kategorie und die Unterkategorie. Für diese DB wollte ich die Eingabe komfortabler machen, so dass nach Auswahl der Kategorie nur noch die passenden Einträge in der Unterkategorie erscheinen. "mm_markt_kategorie" und "mm_markt_unterkategorie" sind zwei weitere Datenbanken, die eine Eltern-Kind-Beziehung haben. Daher habe ich "mm_markt_maschine" als die unabhängige DB bezeichnet, "übergeordnet" wäre wohl besser gewesen.

    Zitat Zitat von zonky Beitrag anzeigen
    und "Zuordnung mit der pid im Skript klappt" für den Teil
    Code:
    unterkategorie.pid = {{param::post?name=category}},
    - richtig? ich nehme an, dass "{{param:ost?name=category}}" den Aliasnamen enthielt - das kann man lösen, indem statt "{{param:ost?name=category}}" man nochmal ein Sub-Select einbaut und mit dem Alias die passsende id holt
    Ja, richtig. Hm, ich dachte die Lösung mit der ID wäre geschickter, weil dann ja nicht noch eine weitere Abfrage statt findet, aber wenn ich weiter darüber nachdenke, wäre das dann für die Frontend-Filter schlecht, da ich dann hier statt mit dem Alias mit der ID arbeiten müsste. Sehe ich das richtig?

    Das ist mein neues Filter-Select:

    Code:
    SELECT unterkategorie.id FROM mm_markt_unterkategorie AS unterkategorie
    WHERE IF (
        {{param::post?name=category}} != 'NULL',
        unterkategorie.pid = (
            SELECT kategorie.id FROM mm_markt_kategorie AS kategorie 
            WHERE kategorie.alias = {{param::post?name=category}} 
            LIMIT 1
        ),
        unterkategorie.pid = (
            SELECT markt.category
            FROM mm_markt_maschine AS markt
            WHERE markt.id = SUBSTRING_INDEX({{param::get?name=id}},'::',-1)
            LIMIT 1
        )
    )
    Wieder einmal Danke fürs in die richtige Richtung schubsen.

    VG
    Nicole
    Geändert von Webstylerin (13.12.2023 um 08:53 Uhr)

  9. #9
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    ich will da keine Wortglauberei anfangen

    der Rest ist prima und ja, bei der Suche wäre das Value in der URL dann die ID und nicht der Alias

  10. #10
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Zitat Zitat von zonky Beitrag anzeigen
    ich will da keine Wortglauberei anfangen
    Ich auch nicht. Ich übe nur die richtige Art und Weise solche Zusammenhänge möglichst kurz und verständlich darzustellen. Mir reicht schon mein Knoten im Kopf, sowas muss ich nicht noch anderen antun.

    Zitat Zitat von zonky Beitrag anzeigen
    der Rest ist prima und ja, bei der Suche wäre das Value in der URL dann die ID und nicht der Alias
    *bitte beliebigen Superhelden-Emote hier einfügen*

    Vielleicht könntest du das Skript noch im Handbuch ergänzen als Beispiel für eine Einzel-Abfrage? Hätte zumindest mir schneller auf den richtigen Weg geholfen.

    LG
    Nicole

  11. #11
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Webstylerin Beitrag anzeigen
    Vielleicht könntest du das Skript noch im Handbuch ergänzen als Beispiel für eine Einzel-Abfrage? Hätte zumindest mir schneller auf den richtigen Weg geholfen.
    hab ich natürlich gemacht

    https://metamodels.readthedocs.io/de...r-eingabemaske

  12. #12
    Contao-Fan Avatar von Webstylerin
    Registriert seit
    24.08.2009.
    Ort
    Schlüsselfeld, Bayern
    Beiträge
    403
    Partner-ID
    6232
    Contao-Projekt unterstützen

    Support Contao

    Standard

    Für alle, die auf diesen Post stoßen und eventuell auch für mein Zukunfts-Ich:

    Dieser Filter wird auch im Frontend angewendet (MM 2.3, Stand Januar 2024) und sucht verzweifelt nach einem nicht vorhandenen Post-Paramter, daher werden im Frontend die Daten nicht angezeigt. Ein Beispiel für eine Backend-Abfrage gibt es in diesem Post.

  13. #13
    Contao-Urgestein Avatar von zonky
    Registriert seit
    19.03.2010.
    Ort
    Berlin, Rdf
    Beiträge
    9.719
    User beschenken
    Wunschliste

    Standard

    Zitat Zitat von Webstylerin Beitrag anzeigen
    Für alle, die auf diesen Post stoßen und eventuell auch für mein Zukunfts-Ich:

    Dieser Filter wird auch im Frontend angewendet (MM 2.3, Stand Januar 2024) und sucht verzweifelt nach einem nicht vorhandenen Post-Paramter, daher werden im Frontend die Daten nicht angezeigt. Ein Beispiel für eine Backend-Abfrage gibt es in diesem Post.
    oder im Handbuch: https://metamodels.readthedocs.io/de...nd-und-backend

    Stand MM 2.2

Aktive Benutzer

Aktive Benutzer

Aktive Benutzer in diesem Thema: 1 (Registrierte Benutzer: 0, Gäste: 1)

Lesezeichen

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •