Important: #102904 - Use TCA group field as foreign selector

See forge#102904

Description

When using TCA type inline, developers have the possibility to use the "foreign selector" feature by defining the foreign_selector option, pointing to a field on the foreign (child) table. This way, editors can use the corresponding selector field to choose existing child records, to create a new inline relation. This can be further extended, using the useCombination appearance option, which allows to modify the child record via the parent record globally.

The field referenced in foreign_selector is usually a field with TCA type select, using the foreign_table option itself to provide the corresponding items to choose.

It's nevertheless also possible to use a TCA type group field as foreign_selector. In this case, the child records have to be selected from the table, defined via the allowed option. For this use case, only one table can be defined. This means, the first table name in allowed is taken, no matter if there are multiple table names defined.

Example using an intermediate table and the useCombination feature:

// Inline field in parent table "tx_extension_inline_usecombination"
'inline' => [
    'label' => 'inline',
    'config' => [
        'type' => 'inline',
        'foreign_table' => 'tx_extension_inline_usecombination_mm',  // Referencing the intermediate table
        'foreign_field' => 'group_parent',
        'foreign_selector' => 'group_child',
        'foreign_unique' => 'group_child',
        'appearance' => [
            'useCombination' => true,
        ],
    ],
],

// Reference fields in intermediate table "tx_extension_inline_usecombination_mm"
'group_parent' => [
    'label' => 'group parent',
    'config' => [
        'type' => 'select',
        'renderType' => 'selectSingle',
        'foreign_table' => 'tx_extension_inline_usecombination', // Referencing the parent table
    ],
],
'group_child' => [
    'label' => 'group child',
    'config' => [
        'type' => 'group',
        'allowed' => 'tx_extension_inline_usecombination_child', // Referencing the child table
        'foreign_table' => 'tx_extension_inline_usecombination_child', // ONLY USED FOR extbase!
    ],
],

// Child table "tx_extension_inline_usecombination_child" does not have any relation fields
Copied!