Таблица block_content_field_data
Таблица block_content_field_data является одной из ключевых таблиц для хранения данных сущностей пользовательских блоков в Drupal. В отличие от базовой таблицы block_content, которая хранит техническую информацию, эта таблица содержит переведенный контент, информацию о ревизиях, а также данные, необходимые для отображения блока на сайте (статус публикации, мета-информация). Данные в эту таблицу попадают через механизм деривации полей (field API) при сохранении сущности.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
id |
int |
Первичный ключ. Уникальный идентификатор (ID) сущности пользовательского блока. Ссылается на block_content.id.
|
revision_id |
int |
Идентификатор текущей ревизии (версии) для этой сущности. Ссылается на block_content_revision.revision_id.
|
type |
varchar(32) |
Машинное имя типа блока (bundle), к которому принадлежит данная сущность. Определяет, какие поля attached к этому блоку. Ссылается на block_content_type.id.
|
langcode |
varchar(12) |
Код языка, для которого представлены данные в этой строке. Одна сущность может иметь несколько записей в этой таблице для каждого из поддерживаемых языков. |
status |
tinyint |
Статус публикации сущности. 1 - опубликовано, 0 - не опубликовано. Неопубликованные блоки обычно не отображаются на сайте.
|
info |
varchar(255) |
Административное описание или название блока. Это то самое название, которое задается при создании блока и отображается в интерфейсе администратора. |
changed |
int |
Метка времени (Unix timestamp) последнего изменения сущности. |
default_langcode |
tinyint |
Флаг, указывающий, является ли данный язык языком по умолчанию для этой сущности. 1 - да, 0 - нет.
|
revision_translation_affected |
tinyint |
Флаг, используемый системой ревизий и переводов Drupal для отслеживания того, была ли затронута данная языковая версия в конкретной ревизии. |
Как это работает
Когда создается или редактируется пользовательский блок через административную панель Drupal (например, тип блока "Базовый" или кастомный тип), данные сохраняются в несколько таблиц. Базовая информация (ID, UUID, тип) записывается в block_content, а данные полей (включая переведенные) - в block_content_field_data и соответствующие таблицы полей (например, block_content__body).
Таблица block_content_field_data денормализована и оптимизирована для быстрого извлечения данных, необходимых для построения списков сущностей (например, на странице /admin/content/block) и для условий отображения. При выполнении запросов к сущностям блоков, особенно с фильтрацией по статусу или языку, JOIN происходит именно с этой таблицей.
Наличие поля langcode означает, что для каждого перевода одной и той же сущности блока в таблице будет создана отдельная запись. Это является частью архитектуры многоязычности в Drupal.
Важно различать сущность блока (block_content) и его размещение в регионах темы. Размещение блока на конкретной странице и в конкретном регионе управляется через конфигурацию плагина Блока в Drupal, которая хранится в таблице config, а связь между конфигурацией и сущностью устанавливается через UUID сущности блока.
Пример SQL-запроса
Выбрать все опубликованные базовые блоки на английском языке:
SELECT id, info, changed
FROM block_content_field_data
WHERE type = 'basic'
AND status = 1
AND langcode = 'en';
Смотрите также
-
таблицу
block_content,
которая хранит основную информацию о сущностях блоков -
таблицу
block_content_revision,
которая хранит данные ревизий пользовательских блоков -
таблицу
block_content__body,
которая хранит данные поля "Тело" для блоков -
таблицу
block_content_field_revision,
которая хранит данные ревизий полей для блоков