Внешний ключ TYPO3 Extension Builder
Почему TYPO3 Extension Builder не генерирует внешние ключи?
Я установил некоторые отношения между моделями, но в коде SQL нет только столбцов FK для значения ключа.
Кто-нибудь может мне помочь?
1 ответ
Цитировать из Kartsen Dambekalns
Это полусознательное дизайнерское решение. Просто посмотрите дату, когда ограничения внешнего ключа были введены в MySQL, и сравните с датой, когда TYPO3 "родился".
Конечно, было бы здорово добавить такие ссылки, тем более что MySQL всегда может обрабатывать их, даже если базовый механизм хранения не обрабатывает их (в случае чего они будут просто игнорироваться).
( источник)
Пока ничего не изменилось, поэтому вам нужно самостоятельно создавать внешние ключи после моделирования.
Ответ на комментарий:
как вы справились с отношениями между двумя таблицами? например, у меня есть таблица людей, которая относится к столовой с колонкой housenr
Это зависит от типа отношения, конечно (1:n
, n:1
, m:n
и т. д.) и Builder прекрасно поддерживает создание отношений в инструменте моделирования. Имейте в виду, что внешние ключи НЕ требуются для поддержания отношений в TYPO3.
В разделе документации TCA описаны некоторые правила, т.е. в указанном случае вы можете использовать select
или же group (with internal_type)
тип поля. Для связи "многие ко многим" вам также понадобится создать таблицу MM. Если вы будете следовать этим документам, вы можете быть уверены, что в общей форме редактирования бэкэнда они будут обработаны правильно.
Как упоминалось ранее, Extension Builder поддерживает создание различных типов отношений в своем инструменте моделирования по щелчку, и стоит потратить некоторое время, чтобы поиграть с ним, чтобы увидеть, как обрабатываются отношения различных типов в TYPO3. Он использует те же правила, которые используются при создании отношений, также в расширениях pre-extbase. Более того, Builder добавляет необходимые методы в модели, например, для getting
, attaching
а также detaching
MM объекты данного поля отношения, поэтому наиболее важно смоделировать все ваши отношения при запуске. В другом случае вам нужно будет написать эти методы вручную (это скучный процесс)