Подклассы Typo3 9.5 и внешние таблицы

#typo3 #extbase #typo3-9.x

#typo3 #extbase #typo3-9.x

Вопрос:

Как мне указать внешние таблицы для атрибутов, определенных в подклассах, при использовании наследования одной таблицы в Typo3 9.5?

У меня есть наследование класса, определенное в ext_typoscript_setup.txt:

 config.tx_extbase.persistance.classes {
    MyProjectBase { mapping {
       tablename = tx_myproject_base
       subclasses = {
          1 = MyProjectDerived
       }
    }}
    MyProjectDerived { mapping {
       tablename = tx_myproject_base
       recordType = 1
       columns = {
           choice.mapOnProperty = selection
       }
    }}
    MyProjectChoice { mapping {
       tablename = tx_myproject_choice
   }}
}
  

В Configuration/TCA/tx_myproject_base.php , У меня есть

 return [
  'ctrl' => ['type' => 'subclass'],
  'columns' => [
     // some fields of the base type
     // and now the fields of the derived type
     'choice' => [
         'config' => [
           'type' => 'select',
           'foreign_table' => tx_myproject_choice,
           'size' => 1,
           'minitems' => 0, 'maxitems' => 1,
           'renderType' => 'selectSingle',
         ]
  ]]
];
  

Таким образом, производные объекты имеют внешний ключ для выбора, называемый choice в базе данных и selection в php.

Когда я выполняю setOrderings(‘selection.ranking’=> ПО УБЫВАНИЮ) в контроллере, я получаю сообщение об ошибке

 The relation information for property "selection" of class "MyProjectDerived" is missing.
  

В выводе отладки я вижу, что поле правильно сопоставлено с полем выбора, но информация foreign_table отсутствует.

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

Как я могу заставить Extbase понять, что поле подтипа является ключом к внешней модели?

Комментарии:

1. вы можете указать ключ к вашей модели домена. В вашей модели домена вы можете добавить поле «выбор» с типом inline, если оно равно 1: n. Если это m: n, тогда используйте select

2. Вы правы. На самом деле у меня есть такая конфигурация ‘type’ как ‘select’, и я соответствующим образом обновил статью.

3. Должен ли я добавить это в качестве ответа для будущих разработчиков? Это сработало для вас?

4. Нет. На самом деле у меня все время была такая конфигурация, я просто удалил ее для публикации. Это все еще не работает.