Таблица node_revision__body
Таблица node_revision__body является частью системы ревизий контента в Drupal и хранит историю изменений основного текстового содержимого (поля body) для всех типов материалов. Каждое изменение поля создает новую запись в этой таблице, связанную с конкретной ревизией ноды.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
bundle |
varchar(128) |
Тип материала (ноды), к которому относится данное поле. Например: article, page.
|
deleted |
tinyint |
Флаг, указывающий на удаление данных поля: 0 - запись активна, 1 - запись удалена.
|
entity_id |
int |
Идентификатор материала (ноды), к которому относится данная ревизия поля. Внешний ключ для таблицы node.
|
revision_id |
int |
Идентификатор ревизии материала. Внешний ключ для таблицы node_revision.
|
langcode |
varchar(32) |
Код языка, для которого сохранено значение поля. |
delta |
int |
Порядковый номер значения для полей с множественным значением. Для одиночных полей всегда равен 0.
|
body_value |
longtext |
Основное значение поля - текст в отформатированном виде. |
body_format |
varchar(255) |
Идентификатор формата текста (текстовый фильтр), который был применен к значению. Ссылается на таблицу filter_format.
|
body_summary |
longtext |
Необязательное краткое изложение (аннотация) основного текста. |
Как это работает
При создании или редактировании материала Drupal создает новую ревизию, если это настроено для данного типа контента. Для поля body это означает создание новой записи в таблице node_revision__body, где revision_id соответствует ID новой ревизии из таблицы node_revision, а entity_id - ID самого материала.
Текущая (активная) ревизия поля определяется по связи с текущей ревизией ноды в таблице node (поле vid). Все остальные ревизии поля считаются историческими и используются для отслеживания изменений и возможности отката.
Система использует комбинацию полей entity_id, revision_id и langcode для однозначной идентификации конкретной ревизии перевода поля для определенного материала.
При удалении материала или его ревизии соответствующие записи в этой таблице не удаляются физически, а помечаются флагом deleted = 1. Это позволяет реализовать корзину контента и корректное удаление данных при выполнении cron.
Пример SQL-запроса
Получить историю изменений основного текста для конкретного материала можно следующим запросом:
SELECT nr.vid, nr.revision_created, nrb.body_value, nrb.body_format
FROM node_revision__body nrb
INNER JOIN node_revision nr ON nrb.revision_id = nr.vid
WHERE nrb.entity_id = 42
AND nrb.deleted = 0
ORDER BY nr.revision_created DESC;
Смотрите также
-
таблицу
node,
которая хранит основные данные материалов -
таблицу
node_revision,
которая хранит ревизии материалов -
таблицу
node_field_data,
которая хранит данные полей для текущих ревизий -
таблицу
node_field_revision,
которая хранит ревизии данных полей материалов