Как мне создать таблицу в пользовательском модуле

12

В Drupal 7 мы использовали hook_schema()файл .install для создания таблицы. Я полагаю, что в Drupal 8 вы тоже можете это сделать, но у меня сложилось впечатление, что вы должны создавать файлы .yml со своей схемой.

Какой метод для создания таблиц в Drupal 8?

albertski
источник
3
Нет, ты прав. hook_schemaЭто все еще способ создания пользовательских таблиц в Drupal 8, которые не описываются сущностями или полями контента . Если ваша пользовательская таблица - это то, что вы считаете «контентом», то я бы использовал сущности, но если она должна быть быстрее и иметь ограниченное количество строк, а вы не выполняете никакого кэширования на внешнем интерфейсе, тогда пользовательская таблица Это хорошо. Вы должны также рассмотреть вопрос о том, является ли эта таблица «конфигурацией», и в этом случае необходимо использовать объект или объект конфигурации.
Мрадклифф

Ответы:

9

hook_schema()все еще используется из модулей Drupal 8 для создания пользовательских таблиц базы данных, используемых из модуля. Даже модули User и Node реализуют его, хотя user_schema()и node_schema()не определяют схему для соответствующих объектов, которые создаются по-другому.

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

снимок экрана

Контентные сущности не используют hook_schema(); Drupal создает таблицу базы данных для них на основе базовых полей, которые определяет класс сущности контента.

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

киамлалуно
источник
8

Вы можете использовать hook install для создания ваших собственных таблиц, если вы действительно этого хотите, хотя у Drupal есть много других более готовых решений. Но если вы хотите свернуть свой собственный, в модуле примеров есть пример модуля dbtng_example: https://www.drupal.org/project/examples с маршрутизацией для добавления и удаления пользовательских записей в базе данных.

Я бы порекомендовал установить его и попробовать, а затем использовать его в качестве основы для создания собственной таблицы базы данных в Drupal 8.

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

Если вы используете инструмент командной строки drupal, то есть даже команда для генерации «drupal generate: entity: config» и «drupal generate: entity: content».

Также в модуле примеров есть config_entity_example и content_entity_example.

Из https://www.previousnext.com.au/blog/understanding-drupal-8s-config-entities : «Основное различие между содержимым и объектами конфигурации заключается в том, как они хранятся, и (на данный момент) объекты конфигурации не могут быть заполнены ».

Существует несколько других готовых решений, таких как модуль config_pages, которые позволяют легко раскрутить места для хранения данных на вашем сайте: https://www.drupal.org/project/config_pages

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

oknate
источник