Таблица comment__body
Таблица comment__body является де-нормализованной таблицей для хранения основного содержимого комментариев (тела комментария) в Drupal. Она создается и управляется модулем Field SQL Storage при добавлении поля типа text (long) с названием body к типу сущности Comment. Таблица поддерживает хранение нескольких ревизий и переводов для каждого комментария.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
bundle |
varchar(128) |
Тип поля (бандл), к которому привязано данное поле. Для стандартного поля тела комментария обычно имеет значение comment.
|
deleted |
int |
Флаг удаления поля: 0 - поле активно, 1 - поле удалено. Позволяет безопасно удалять поля без физического удаления данных из БД.
|
entity_id |
int |
Идентификатор комментария (cid), к которому относится данное тело. Внешний ключ к таблице comment.
|
revision_id |
int |
Идентификатор ревизии комментария. Внешний ключ к таблице comment_revision. Совпадает с entity_id для текущей ревизии.
|
langcode |
varchar(32) |
Код языка, для которого предназначено данное содержимое (например, en, ru). Позволяет хранить переводы содержимого комментария.
|
delta |
int |
Порядковый номер элемента, если поле допускает множественные значения. Для стандартного поля body обычно равен 0.
|
body_value |
longtext |
Основное содержимое тела комментария в необработанном виде (сырой текст). |
body_summary |
longtext |
Опциональное краткое изложение (аннотация) содержимого комментария. Может генерироваться автоматически или заполняться вручную. |
body_format |
varchar(255) |
Идентификатор формата текстового фильтра (например, basic_html, full_html), который применяется к содержимому. Внешний ключ к таблице filter_format.
|
Как это работает
При создании или редактировании комментария пользователь вводит текст в поле тела комментария. Drupal сохраняет этот текст в таблицу comment__body, связывая его с ID комментария (entity_id) и его ревизии (revision_id).
Если для сайта включено многоязычие и создается перевод комментария, для одного и того же entity_id будет создана дополнительная запись с другим langcode, содержащая переведенный текст.
При выводе комментария система загружает запись из comment__body по entity_id и текущему языку, применяет к значению body_value текстовые фильтры, указанные в body_format, и отображает отфильтрованный HTML.
Структура с отдельной таблицей для каждого поля (как comment__body) является частью архитектуры полей Drupal и обеспечивает гибкость в добавлении, изменении и удалении полей без изменения структуры базовой таблицы сущности (comment).
Пример SQL-запроса
Выбрать основные данные комментариев вместе с их телами для русского языка:
SELECT c.cid, c.subject, cb.body_value, cb.body_format
FROM comment c
INNER JOIN comment__body cb ON c.cid = cb.entity_id AND cb.deleted = 0
WHERE cb.langcode = 'ru'
ORDER BY c.created DESC;
Смотрите также
-
таблицу
comment,
которая хранит основную информацию о комментариях -
таблицу
comment_field_data,
которая содержит денормализованные данные комментариев -
таблицу
comment_revision,
которая хранит ревизии комментариев -
таблицу
node__body,
которая хранит тела материалов (нод) по аналогичной схеме