yform icon indicating copy to clipboard operation
yform copied to clipboard

joinRelation stolpert über be_manager_relation-Vererbung

Open christophboecker opened this issue 4 years ago • 1 comments

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)

christophboecker avatar Jul 03 '21 13:07 christophboecker

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

AWqxKAWERbXo avatar Jul 03 '21 17:07 AWqxKAWERbXo