54 Nachrichten unter 19 Themen von 27 Mitgliedern
[SilverStripe Roadmap][Changelog]

Datamodel - Relation filters SS3

Seite: 1 1297 mal gelesen
  • schreifisch
    Community Member
    9 Beiträge

    Datamodel - Relation filters SS3

    Hallo,
    offensichtlich funktionieren die Filterfunktionen zur Relationsfilterung von Datensätzen nicht oder nicht richtig? Gibt es da irgendwelche Erkenntnisse?

    Folgendes Beispiel aus den Docs:

    $members = Member::get()->filter( array( 'Groups.Permissions.Code' => 'ADMIN' ) );

    foreach($members as $member) {
    echo "<p>$member->FirstName $member->Email</p>";
    }

    Sollte eigendlich alle Member ausspucken, deren Gruppen den Permissioncode 'ADMIN' haben. ommt aber eher eine Fehlermeldung. Relevantes: Unknown column 'Groups.Permissions.Code' in 'where clause'. Scheinbar werden die Relationen gar nicht aufgelöst, sondern der String direkt als Tabellenspalte in der WHERE-clause ausgegeben.

    Danke
    fisch
  • schreifisch
    Community Member
    9 Beiträge

    Re: Datamodel - Relation filters SS3

    Ich habe zwar nicht das Gefühl, als wäre dies hier eine gut funktionierende Comunity, aber mglw. liest's ja doch jemand:

    Nachdem ich mir mal die Klasse DataList und ihre filter()- respektive addFilter()-Methode angesehen habe, glaube ich festgestellt zu haben, dass momentan die Auflösung des Relations-Strings gar nicht implementiert ist. Was mich wundert ist, das diese Funktionalität trotzdem Dokumentiert ist!?

    Beste Grüße
  • schreifisch
    Community Member
    9 Beiträge

    Re: Datamodel - Relation filters SS3

    Sooo, jetzt kommt Butter an die Fische!
    Die Relation-Strings werden tatsächlich nicht aufgelöst - diese Funktionalität ist noch nicht implementiert. Bezugnehmende Teile der Dokumentation wurden - um Unstimmigkeiten zu vermeiden - vorübergehend deaktiviert. Nachzulesen ist das alles hier.
    Und aus purem Trotz werde ich weiterhin hier posten! Irgendwann, ja irgendwann wird einer meine bis dahin völlig veralteten Beiträge lesen; und dann werde ich zufrieden sterben...
  • lx
    lx Community Member
    11 Beiträge

    Re: Datamodel - Relation filters SS3

    Hallo schreifisch,

    hast du mal probiert:


    $members = Member::get()->filter( array( 'Groups.Permissions.Code:ExactMatch' => 'ADMIN' ) );


    lx
  • schreifisch
    Community Member
    9 Beiträge

    Re: Datamodel - Relation filters SS3

    Hallo lx,

    nein, das habe ich nicht probiert. Aber ich habe mir die Quellen angesehen. Klick hier, und du wirst die betreffenden Methoden der DataList-Klasse sehen. Als da wären:
    • filter(): macht eigendlich -ganz grob - nichts weiter, als die Methodenargumente zu zählen, vorzubereiten und weiter an addFilter() zu schieben.
    • addFilter() zerpflückt die Argumente und fügt einen weiteren Filter hinzu. Hier liegt der Haase im sprichwörtlichen Pfeffer. Es wird zwar geprüft ob ein Doppelpunkt (:) im String enthalten ist, um die Modifikatoren von den eigendlichen Argumenten zu trennen, jedoch müsste theoretisch - um den RelationFilters zu genügen - auch aufgelöst werden, welche Relationen verfolgt werden müssen, um daraus einen gültigen Join zu basteln. Ein erster Blick verrät, das passiert nicht. Dazu müsste nämlich der von den Modifikatoren getrennte String erneut auf das Vorkommen von Punkten (.) als Trenner der betroffenen Tabellen untersucht werden, aber so etwas kann ich nicht finden. Also wird der vollständige "Relationsstring" (Bsp: Groups.Permissions.Code) als Tabellenspalte der aktuellen Tabelle bzw. als Eigenschaft des gesuchten Objektes behandelt. Das Ergebnis ist ein falsches Statement à la SELECT foo FROM bar WHERE Groups.Permissions.Code = myValue Die Spalte Groups.Permissions.Code gibt es allerdings nicht, pech gehabt.


    So, wenn möglich, belehre mich einer eines bessereren, dann kann ich wenigstens weiterarbeiten. Erstmal probiere ich deinen Vorschlag mal aus, auch wenn ich wenig Hoffnung habe. Möglicherweise passiert ja doch noch mehr durch "spukhafte Fremdwirkung". (Daran hat schon Einstein nicht geglaubt...)

    Grüße
    schreifisch

    P.S.: Die Listen im Forum sehen irgendwie zerschossen aus. Es gibt keine Listensymbole (Kreise, anstriche etc.) und die einzelnen Listenelemente werden nicht voneinander getrennt. Zudem verwurstelt der mangelnde Zeilenumbruch das Seitemlayout. Vlt. kann man da ja mal was machen?
    LG fisch

Zur Zeit online: Zur Zeit ist leider niemand online.

Wir begrüßen unsere neuen Mitglieder: FG