Мультифильтр (как отфильтровать поле по множественным значениям другого поля)

Модель данных:

XML:

        <field id="system_id" xsi:type="AttributeExternalKey">
          <sql>system_id</sql>
          <target_class>System</target_class>
          <is_null_allowed>false</is_null_allowed>
          <on_target_delete>DEL_MANUAL</on_target_delete>
        </field>
        <field id="system_name" xsi:type="AttributeExternalField">
          <extkey_attcode>system_id</extkey_attcode>
          <target_attcode>name</target_attcode>
        </field>
        <field id="groupb_list" xsi:type="AttributeLinkedSetIndirect">
          <linked_class>lnkGroupbToDigital</linked_class>
          <ext_key_to_me>digital_id</ext_key_to_me>
          <ext_key_to_remote>groupb_id</ext_key_to_remote>
          <duplicates/>
          <display_style>property</display_style>
          <filter><![CDATA[SELECT Groupb AS G JOIN lnkSystemToGroupb AS lnkSTG ON lnkSTG.groupb_id = G.id WHERE system_id = :this->system_id]]></filter>
          <dependencies>
            <attribute id="system_id"/>
          </dependencies>
        </field>
        <field id="typeb_list" xsi:type="AttributeLinkedSetIndirect">
          <linked_class>lnkTypebToDigital</linked_class>
          <ext_key_to_me>digital_id</ext_key_to_me>
          <ext_key_to_remote>typeb_id</ext_key_to_remote>
          <duplicates/>
          <display_style>property</display_style>
          <filter><![CDATA[SELECT Typeb WHERE groupb_id IN (:this->groupb_list)]]></filter>
          <dependencies>
            <attribute id="groupb_list"/>
          </dependencies>
        </field>

Вывод:

Фильтр для поля typeb_list ОЖИДАЕМО не работает. Т.к. там нужна строка типа /a, b, c/ , а прилетает объект.

Таким образом необходимо реализовать фильтр в методе, но перед этим получить список выбранных пользователем групп в поле goupb_list.

Методы:

        <method id="SetCalculateValues">
          <static>false</static>
          <access>public</access>
          <code><![CDATA[public function SetCalculateValues()
          {
            $sAttCode = 'groupb_list';
            $oSet = $this->Get($sAttCode);
            IssueLog::Info('Объект: '.$sAttCode.' ==== '.print_r($oSet, true));
            IssueLog::Info('Лист изменений ====> '.print_r($this->ListChanges(), true));
          }]]></code>
        </method>
        <method id="Get" _delta="define">
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[public function Get($sAttCode)
          {
            IssueLog::Info('Вызван метод Get для поля '.$sAttCode);
            
            if ($sAttCode === 'typeb_list')
            {
              $this->SetCalculateValues();
            }
            return parent::Get($sAttCode);
          }]]></code>
        </method>
        <method id="OnInsert">
          <static>false</static>
          <access>public</access>
          <type>Overload-DBObject</type>
          <code><![CDATA[public function OnInsert()
          {
            parent::OnInsert();
            $this->SetCalculateValues();
          }]]></code>
        </method>

Пояснение к методам:
вывод в лог результата метода OnInsert:

2025-05-23 10:37:57 | Info    | 1     | Объект: groupb_list ==== ormLinkSet Object
(
    [sHostClass:protected] => Digital
    [sAttCode:protected] => groupb_list
    [sClass:protected] => lnkGroupbToDigital
    [oOriginalSet:protected] => DBObjectSet Object
        (
***
    [aAdded:protected] => Array
        (
            [-1] => lnkGroupbToDigital Object
                (
                    [m_iFormId:protected] => 
                    [sDisplayMode:protected] => view
                    [aFieldsMap:protected] => 
                    [bAllowWrite:protected] => 
                    [bAllowDelete:protected] => 
                    [aAttributesFlags:protected] => 
                    [aInitialAttributesFlags:protected] => 
                    [m_datCreated:protected] => 
                    [m_datUpdated:protected] => 
                    [m_bIsInDB:protected] => 
                    [m_iKey:protected] => -1
                    [m_aCurrValues:DBObject:private] => Array
                        (
                            [digital_id] => 0
                            [digital_name] => 
                            [groupb_id] => 3
                            [groupb_name] => 
                            [friendlyname] => 
                            [digital_id_friendlyname] => 
                            [groupb_id_friendlyname] => 
                        )

***

            [-2] => lnkGroupbToDigital Object
                (
                    [m_iFormId:protected] => 
                    [sDisplayMode:protected] => view
                    [aFieldsMap:protected] => 
                    [bAllowWrite:protected] => 
                    [bAllowDelete:protected] => 
                    [aAttributesFlags:protected] => 
                    [aInitialAttributesFlags:protected] => 
                    [m_datCreated:protected] => 
                    [m_datUpdated:protected] => 
                    [m_bIsInDB:protected] => 
                    [m_iKey:protected] => -2
                    [m_aCurrValues:DBObject:private] => Array
                        (
                            [digital_id] => 0
                            [digital_name] => 
                            [groupb_id] => 5
                            [groupb_name] => 
                            [friendlyname] => 
                            [digital_id_friendlyname] => 
                            [groupb_id_friendlyname] => 
                        )

***
)
 | IssueLog |||
2025-05-23 10:37:57 | Info    | 1     | Лист изменений ====> Array
(
    [name] => Имя
    [system_id] => 2
    [system_name] => 
    [groupb_list] => ormLinkSet Object
        (
***

            [aAdded:protected] => Array
                (
                    [-1] => lnkGroupbToDigital Object
                        (
                            [m_iFormId:protected] => 
                            [sDisplayMode:protected] => view
                            [aFieldsMap:protected] => 
                            [bAllowWrite:protected] => 
                            [bAllowDelete:protected] => 
                            [aAttributesFlags:protected] => 
                            [aInitialAttributesFlags:protected] => 
                            [m_datCreated:protected] => 
                            [m_datUpdated:protected] => 
                            [m_bIsInDB:protected] => 
                            [m_iKey:protected] => -1
                            [m_aCurrValues:DBObject:private] => Array
                                (
                                    [digital_id] => 0
                                    [digital_name] => 
                                    [groupb_id] => 3
                                    [groupb_name] => 
                                    [friendlyname] => 
                                    [digital_id_friendlyname] => 
                                    [groupb_id_friendlyname] => 
                                )

                    [-2] => lnkGroupbToDigital Object
                        (
                            [m_iFormId:protected] => 
                            [sDisplayMode:protected] => view
                            [aFieldsMap:protected] => 
                            [bAllowWrite:protected] => 
                            [bAllowDelete:protected] => 
                            [aAttributesFlags:protected] => 
                            [aInitialAttributesFlags:protected] => 
                            [m_datCreated:protected] => 
                            [m_datUpdated:protected] => 
                            [m_bIsInDB:protected] => 
                            [m_iKey:protected] => -2
                            [m_aCurrValues:DBObject:private] => Array
                                (
                                    [digital_id] => 0
                                    [digital_name] => 
                                    [groupb_id] => 5
                                    [groupb_name] => 
                                    [friendlyname] => 
                                    [digital_id_friendlyname] => 
                                    [groupb_id_friendlyname] => 
                                )


***
    [note] => 
    [friendlyname] => 
    [system_id_friendlyname] => 
)
 | IssueLog |||

Таким образом видно, что OnInsert вызывает SetCalculateValues, в котором используется вывод функций $this->Get($sAttCode) и $this->ListChanges() и обе они дают результат.

Теперь посмотрим результаты вызова метода Get

2025-05-23 10:45:53 | Info    | 1     | Вызван метод Get для поля typeb_list | IssueLog |||
2025-05-23 10:45:53 | Info    | 1     | Вызван метод Get для поля groupb_list | IssueLog |||
2025-05-23 10:45:53 | Info    | 1     | Объект: groupb_list ==== ormLinkSet Object
(
    [sHostClass:protected] => Digital
    [sAttCode:protected] => groupb_list
    [sClass:protected] => lnkGroupbToDigital
    [oOriginalSet:protected] => DBObjectSet Object
        (
***
    [aAdded:protected] => Array
        (
            [-2] => lnkGroupbToDigital Object
                (
                    [m_iFormId:protected] => 
                    [sDisplayMode:protected] => view
                    [aFieldsMap:protected] => 
                    [bAllowWrite:protected] => 
                    [bAllowDelete:protected] => 
                    [aAttributesFlags:protected] => 
                    [aInitialAttributesFlags:protected] => 
                    [m_datCreated:protected] => 
                    [m_datUpdated:protected] => 
                    [m_bIsInDB:protected] => 
                    [m_iKey:protected] => -2
                    [m_aCurrValues:DBObject:private] => Array
                        (
                            [digital_id] => 0
                            [digital_name] => 
                            [groupb_id] => 0
                            [groupb_name] => 
                            [friendlyname] => 
                            [digital_id_friendlyname] => 
                            [groupb_id_friendlyname] => 
                        )
***
 | IssueLog |||
2025-05-23 10:45:53 | Info    | 1     | Лист изменений ====> Array
(
    [name] => Имечко
    [system_id] => 2
    [system_name] => Класс 2
    [groupb_list] => ormLinkSet Object
        (
***

            [aAdded:protected] => Array
                (
                    [-2] => lnkGroupbToDigital Object
                        (
                            [m_iFormId:protected] => 
                            [sDisplayMode:protected] => view
                            [aFieldsMap:protected] => 
                            [bAllowWrite:protected] => 
                            [bAllowDelete:protected] => 
                            [aAttributesFlags:protected] => 
                            [aInitialAttributesFlags:protected] => 
                            [m_datCreated:protected] => 
                            [m_datUpdated:protected] => 
                            [m_bIsInDB:protected] => 
                            [m_iKey:protected] => -2
                            [m_aCurrValues:DBObject:private] => Array
                                (
                                    [digital_id] => 0
                                    [digital_name] => 
                                    [groupb_id] => 0
                                    [groupb_name] => 
                                    [friendlyname] => 
                                    [digital_id_friendlyname] => 
                                    [groupb_id_friendlyname] => 
                                )
***

    [note] => 
    [friendlyname] => 
    [system_id_friendlyname] => Класс 2
)
 | IssueLog |||

Таким образом видно, что Get вызывает SetCalculateValues (то, что использованные в методе SetCalculateValues функции выдают нужный результат, мы убедились ранее), но вот только когда SetCalculateValues вызывается из Get, результаты нулевые.

более того, нет секции

[-1] => lnkGroupbToDigital Object

а сразу идёт

[-2] => lnkGroupbToDigital Object

несмотря на то, что эти поля получены:

    [name] => Имечко
    [system_id] => 2
    [system_name] => Класс 2
    [system_id_friendlyname] => Класс 2

Вот что такого вызывает OnInsert, чего не делает Get? Как в процессе редактирования получить результаты выбора пользователя в поле groupb_list?

Привет! Я не понял, что должна делать SetCalculateValues? Она ничего не возвращает, ничего не меняет, только выводит в лог.