какие возможные способы включения внешних таблиц в TYPO3

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

Но что вообще возможно?

На данный момент мне нужны две внешние таблицы для расширения, и вместо того, чтобы использовать их напрямую, я импортирую их для локальной работы, как обычно. Но импорт имеет некоторые недостатки.

Отказы, которые я могу принять:

  • данные не актуальны (изменения во внешние таблицы импортируются позже)
  • данные доступны только для чтения (в любом случае изменения выполняются извне)

Для импорта я использую ext:external_import, но есть некоторые проблемы, так как не все данные могут быть импортированы в одном запускаю, а потом ошибки (например есть отчеты о дубликате ключей, увы во внешних таблицах нет дубликатов ключей)

С другой стороны, я сомневаюсь, что смогу использовать внешние таблицы напрямую, поскольку они не имеют обычной структуры TYPO3 (поля: 'uid', 'pid', 'tstamp', ...). (Может быть, их можно сопоставить в представлении?) (Конечно, в таблицах, которые я импортирую, данные в этих полях существуют)

Также внешние изменения могут остаться незамеченными, а кэшированное содержимое не отражает текущие данные. В моем случае это было бы незначительной проблемой, поскольку в настоящее время у нас уже нет «живых» данных, но их необходимо регулярно очищать для кеша и индекса поиска (solr).

Каковы возможные решения? ? (зависят ли они от версии TYPO3?) Каков ваш опыт?


РЕДАКТИРОВАТЬ:

При попытке реализовать это с учетом данных ответов появляется больше сомнений:

  • таблицы доступны только для чтения (поскольку они изменяются извне):
    Как мне объявить это в TYPO3?
  • таблицы не следуют обычным правилам именования, особенно одна таблица называется sys_category, что таким образом конфликтует с таблицей TYPO3 sys_category.
    Могу ли я создать отображение внутри TYPO3?
  • Могу ли я создать представление из TYPO3 для переименования таблиц и полей?
    например:
CREATE View tx_myext_category
SELECT id as uid, name as title, ...
  FROM databasename.sys_category;

person Bernd Wilke πφ    schedule 14.04.2021    source источник


Ответы (2)


Да, вы можете получать данные напрямую из других баз данных/таблиц. Конечно, это сильно зависит от вариантов использования и данных, которые вы получаете:

  • Он отлично работает для чтения/записи данных с помощью queryBuilder и всех известных вам API из https://docs.typo3.org/m/typo3/reference-coreapi/master/en-us/ApiOverview/.Database/Index.html, например ConnectionPool , Построитель запросов
  • Если вы хотите показать данные в formengine, например. list, вам также потребуется минимальное количество столбцов, таких как uid, pid и действительный TCA.
person Georg Ringer    schedule 14.04.2021
comment
Представительство в ВЕ не обязательно. все данные должны отображаться в FE. в виде списка и подробного представления. данные в первой таблице представляют собой дерево (родительский указатель), и каждая запись второй таблицы соответствует одной записи в первой таблице. - person Bernd Wilke πφ; 14.04.2021
comment
Насколько я понимаю, по крайней мере столбцы uid и pid должны существовать. никак иначе? - person Bernd Wilke πφ; 15.04.2021
comment
Это действительно зависит. если вы используете репозиторий extbase, вам нужны tca и эти поля. если вы просто делаете необработанные запросы и выводите их в жидкости, все будет хорошо - person Georg Ringer; 15.04.2021
comment
появляются дополнительные вопросы: см. редактирование в вопросе - person Bernd Wilke πφ; 16.04.2021

По моему опыту, механизм сопоставления работает только в том случае, если внешняя таблица имеет структуру, почти аналогичную таблицам TYPO3. Вам нужно как минимум uid поле на внешней стороне. Это не может быть нанесено на карту! Отсутствующее поле pid может быть обработано на стороне TYPO3, а также crdate или tstamp, если это необходимо. Просто заполните локальный массив данных значениями, которые нужны TYPO3.

Проблемы возникают, если у вас есть отношения, с которыми нужно иметь дело. Многие внешние системы имеют другие способы обработки отношений. Вы можете столкнуться со многими проблемами, если попытаетесь полагаться только на механизм сопоставления.

Другими проблемами являются поля с форматом даты. Большинство внешних таблиц в мире MS используют формат unixtime.

Если у вас возникнут проблемы с механизмом сопоставления, вы можете переключиться на TYPO3 queryBuilder. Это мощный запасной вариант. У меня возникли проблемы только с операторами JOIN специального типа.

Но с TYPO3 queryBuilder вы предоставлены сами себе. Вы размещаете экземпляры кода queryBuilder в репозитории и добавляете свой код модели как обычно: таким образом, вы можете продолжать работать с Fluid во внешнем интерфейсе, как вы привыкли.

ОТВЕТ НА ИЗМЕНЕНИЕ:

  • С TYPO3 queryBuilder таблицы только для чтения не проблема. Просто не реализуйте классы установки в своих моделях.
  • С TYPO3 queryBuilder вы можете вызывать любую внешнюю таблицу с любым именем. У вас есть полный контроль над выходными данными в вашем репозитории, потому что сопоставление обрабатывается внутри него.
  • Насколько я знаю, в TYPO3 вплоть до v9 нет возможности создавать SQL-представления ни с помощью механизма отображения DBAL, ни с TYPO3. построитель запросов.
person Stefan Padberg    schedule 15.04.2021
comment
появляются дополнительные вопросы: см. редактирование в вопросе - person Bernd Wilke πφ; 16.04.2021