Таблица field_config_instance
Таблица field_config_instance является одной из ключевых таблиц системы полей Drupal. Она определяет, какие поля прикреплены к каким типам сущностей (бандлам) и содержит специфические настройки для каждого такого экземпляра поля.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
id |
serial |
Уникальный числовой идентификатор экземпляра поля. Первичный ключ таблицы. |
field_id |
int |
Внешний ключ, связывающий экземпляр с базовой конфигурацией поля из таблицы field_config.
|
field_name |
varchar(32) |
Машинное имя поля. Дублируется здесь для упрощения JOIN-запросов и повышения производительности. |
entity_type |
varchar(32) |
Тип сущности, к которой привязан экземпляр поля (например, node, user, taxonomy_term).
|
bundle |
varchar(128) |
Название бандла (подтипа) сущности, к которому привязано поле (например, тип материала article, словарь таксономии tags).
|
data |
longblob |
Сериализованные данные конфигурации для данного экземпляра поля. Хранятся в формате PHP serialize. Содержат настройки, специфичные для этого бандла: метку поля, описание, обязательность, настройки отображения и т.д. |
deleted |
tinyint |
Флаг, указывающий, удален ли данный экземпляр поля (1) или активен (0). В Drupal данные помечаются как удаленные, а физически удаляются пакетно для обеспечения целостности данных.
|
Как это работает
Система полей Drupal разделена на две основные части: общая конфигурация поля (field_config) и его экземпляры (field_config_instance). Одно поле (например, "Изображение") может быть добавлено к разным типам сущностей (нодам, пользователям) или к разным бандлам одного типа сущности (ноды "Статья" и "Страница"). Каждая такая привязка создает отдельную запись в field_config_instance.
Поле data содержит настройки, которые могут отличаться для каждого экземпляра. Например, для поля "Тело" (body) в типе материала "Статья" можно установить метку "Текст статьи", а в типе материала "Страница" - "Содержание страницы". Эти метки хранятся именно в конфигурации экземпляра.
Когда модуль Field UI или другой код создает новое поле на форме управления бандлом, происходит вставка новой записи в эту таблицу. При удалении поля с формы бандла соответствующей записи устанавливается флаг deleted = 1.
Во время работы Drupal активно использует эту таблицу для построения форм ввода и отображения полей, проверяя, какие поля attached к какой сущности и с какими настройками.
Пример SQL-запроса
Получить список всех экземпляров полей для типа материала "article":
SELECT fci.id, fci.field_name, fci.field_id, fci.entity_type, fci.bundle
FROM field_config_instance fci
WHERE fci.entity_type = 'node' AND fci.bundle = 'article' AND fci.deleted = 0;
Получить информацию о конкретном экземпляре поля с десериализованными данными:
SELECT fci.*, fc.type as field_type, fc.module as field_module,
UNCOMPRESS(fci.data) as data_serialized
FROM field_config_instance fci
INNER JOIN field_config fc ON fci.field_id = fc.id
WHERE fci.id = 15;
Смотрите также
-
таблицу
field_config,
которая хранит общую конфигурацию полей -
таблицу
field_data_body,
которая хранит данные полей конкретного типа -
таблицу
node,
которая является основной таблицей для хранения материалов (нод) -
таблицу
users,
которая хранит данные пользователей