Таблица field_revision_field_data
Таблица field_revision_field_data является частью системы полей Drupal и предназначена для хранения всех ревизий данных полей сущностей. В отличие от таблицы field_data_field_data, которая хранит только текущие (актуальные) версии данных, эта таблица сохраняет полную историю изменений каждого поля.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
entity_type |
varchar(128) |
Тип сущности, к которой принадлежит поле (например, node, user, taxonomy_term).
|
bundle |
varchar(128) |
Название бандла (типа материала) сущности, к которому привязано поле. |
deleted |
int |
Флаг удаления: 0 - запись активна, 1 - запись удалена.
|
entity_id |
int |
Идентификатор сущности, к которой принадлежит поле. Внешний ключ к базовой таблице сущности. |
revision_id |
int |
Идентификатор ревизии сущности. Внешний ключ к таблице ревизий сущности. |
language |
varchar(32) |
Язык, для которого сохранены данные поля (например, und для неопределенного языка, en, ru).
|
delta |
int |
Порядковый номер значения для полей с множественным значением (начинается с 0).
|
field_data_value |
longtext |
Основное значение поля. Конкретное содержание зависит от типа поля. |
field_data_format |
varchar(255) |
Идентификатор формата текста, если поле поддерживает фильтрацию. Ссылается на таблицу filter_format.
|
Как это работает
Когда в Drupal создается новая ревизия сущности (например, при сохранении новой версии материала), система полей создает соответствующие записи в таблицах ревизий для каждого поля. Для каждого поля field_data создается парная таблица field_revision_field_data.
При каждом сохранении новой ревизии сущности, данные всех ее полей записываются в соответствующие таблицы ревизий. При этом в таблице field_data_field_data обновляется только запись с последней (текущей) версией, а в field_revision_field_data сохраняется полная история всех версий.
Первичный ключ таблицы состоит из комбинации полей: entity_type, entity_id, revision_id, deleted, delta, language. Это гарантирует уникальность каждой ревизии каждого значения поля.
Система использует эти данные для отображения истории изменений, сравнения версий и восстановления предыдущих состояний полей через механизм ревизий Drupal.
Пример SQL-запроса
Получить все ревизии поля body для конкретного материала:
SELECT fr.revision_id, fr.field_body_value, fr.field_body_format, n.vid, n.title
FROM field_revision_body fr
JOIN node_revision n ON fr.revision_id = n.vid
WHERE fr.entity_id = 123
ORDER BY fr.revision_id DESC;
Смотрите также
-
таблицу
field_data_body,
которая хранит текущие версии данных полей -
таблицу
node_revision,
которая содержит ревизии материалов -
таблицу
node,
которая хранит основные данные материалов -
таблицу
field_config,
которая содержит конфигурацию полей