yakamara / yform

YForm für REDAXO 5 – Formulare im Frontend und Backend mit Verwaltung von Datenbank-Tabellen.
MIT License
77 stars 55 forks source link

joinRelation stolpert über be_manager_relation-Vererbung #1097

Open christophboecker opened 3 years ago

christophboecker commented 3 years ago

Wie kann man denn das lösen?

Ich habe ein eigenes Value, das be_manager_relation erweitert. Hier die Kurzfassung:

class rex_yform_value_meinfeld extends rex_yform_value_be_manager_relation
{
    public static function getListValue($params)
    {
        // ...
    }

    public static function getSearchField($params)
    {
        // ...
    }

    public static function getSearchFilter($params)
    {
        // ...
    }

}

Nun weigert sich die YOrm-Query, dieses Feld als be_manager_relation anzuerkennen. $query->joinRelation('feldname') führt zu einem Fehler "Column "feldname" is not a be_manager_relation column. Das ist nachvollziehbar, denn die Feldüberprüfung in der Table-Klasse macht nur

    public function getRelations()
    {
        if (null === $this->relations) {
            $this->relations = $this->getValueFields(['type_name' => 'be_manager_relation']);
        }
        return $this->relations;
    }

Ich verstehe komplett, dass es schwierig ist, hier die Vererbungen zu berücksichtigen. Andererseits habe ich den Eindruck, dass immer mehr Nutzer mit eigenen Values arbeiten, was das Problem etwas größer werden lässt. Und ja: man kann den Join auch "mit der Hand am Arm bauen".

Alle Value-Klassen durchzuprobieren, die auf be_manager_relation aufsetzen dürfte wohl schon als Performance-Gründen suboptimal sein. Irgendwie hinterlegen, welche Klassen abgefragt werden sollen? EP?

Oder sagt ihr: Kommt, Leute lasst gut sein, nehmt den Basis-Join als Fallback; man kann nicht jede Variante mit vertretbarem Aufwand abfangen. (was für mich auch OK ist)

alxndr-w commented 3 years ago

Ein Methode isRelationField() etablieren und die property der Klasse dazu einführen?