TYPO3 9 Extbase: редактировать отношение m: n из родительских и дочерних элементов в форме бэкэнда - PullRequest
0 голосов
/ 04 июля 2019

В моем расширении у меня есть две модели: родительская модель , являющаяся исследовательской группой докторской программы, дочерняя модель , являющаяся заявками (с датами открытия и закрытия). В промежуточной таблице я храню отношения между ними для исследовательских групп, участвующих в раундах подачи заявок. Раунды заявок могут перекрываться с определенными группами, участвующими в двух параллельных раундах. Вот почему мне нужно было сделать это отношением m: n. Я заставил все это работать, используя официальную документацию .

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

Я нашел информацию о встроенных полях , которая показывает двунаправленное использование - но я изо всех сил пытаюсь перевести это в ситуацию с моим добавочным номером.

Примечание: Мне не нужны встроенные правки, на самом деле только списки selectCheckBox с обеих сторон.

Модель домена Groups содержит следующее свойство:

/**
 * @var \TYPO3\CMS\Extbase\Persistence\ObjectStorage<\Myvendor\Researchgroups\Domain\Model\ApplicationRounds>
 */
protected $applicationRounds = NULL;

сохраняется в базе данных на application_rounds INT(10)

TCA Groups содержит следующее определение:

$GLOBALS['TCA']['tx_researchgroups_domain_model_groups']['columns'] = [
    'application_rounds' => [
        'label' => '' . $locLang . 'groups.recruitingSelection',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectCheckBox',
            'foreign_table' => 'tx_researchgroups_domain_model_applicationrounds',
            'foreign_table_where' => 'ORDER BY tx_researchgroups_domain_model_applicationrounds.date_open DESC',
            'MM' => 'tx_researchgroups_groups_applicationrounds_mm',
            'eval' => 'int',
        ],
    ],
]

Как добавить соответствующий список выбора в модель ApplicationRounds? Должен ли я также добавить свойство, сохраненное в базе данных - даже если бы это было излишним?

Ответы [ 2 ]

0 голосов
/ 04 июля 2019

Вот полный рабочий код, который я добавил, следуя подсказкам в Бернд ответ :

ApplicationRounds TCA (детская модель)

$GLOBALS['TCA']['tx_researchgroups_domain_model_applicationrounds']['columns'] = [
    'researchgroups' => [
        'label' => '' . $locLang . 'researchgroups_applicationrounds.recruitingGl',
        'config' => [
            'type' => 'select',
            'renderType' => 'selectCheckBox',
            'foreign_table' => 'tx_researchgroups_domain_model_groups',
            'foreign_table_where' => ' AND tx_researchgroups_domain_model_groups.hidden = 0 ORDER BY tx_researchgroups_domain_model_groups.last_name ASC',
            'MM' => 'tx_researchgroups_groups_applicationrounds_mm',
            'MM_opposite_field' => 'last_name',
            'eval' => 'int',
        ],
    ],
]

(не забудьте добавить researchgroups к $GLOBALS['TCA']['tx_researchgroups_domain_model_applicationrounds']['types'][1])

И добавить поле в таблицу базы данных дочерней модели: researchgroups INT(11) NOT NULL DEFAULT '0',

Я не добавил researchgroups в модель предметной области.

0 голосов
/ 04 июля 2019

вам нужно установить mm-opposite-field:

Если вы хотите также сделать отношение MM редактируемым с внешней стороны (двунаправленным) отношения, вам необходимочтобы установить MM_opposite_field на внешней стороне в качестве имени поля на локальной стороне.

[редактировать с помощью оригинального вопросника] см. следующий ответ для полного кода, основанного на этомответить

...