Таблица node_field_revision
Таблица node_field_revision является одной из ключевых таблиц для системы ревизий в Drupal. В отличие от основной таблицы node_revision, которая хранит метаинформацию о ревизиях (ID, заголовок, UID автора и т.д.), данная таблица отвечает непосредственно за хранение данных полей для каждой версии материала.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
nid |
int |
Идентификатор материала (ноды). Внешний ключ для таблиц node и node_revision.
|
vid |
int |
Идентификатор ревизии. Внешний ключ для таблицы node_revision. Вместе с nid и langcode формирует первичный ключ.
|
langcode |
varchar(12) |
Код языка, для которого сохранены данные полей. Позволяет системе хранить разные версии полей для каждого языка многоязычного сайта. |
status |
tinyint |
Статус опубликованности данной ревизии. 1 означает опубликовано, 0 - не опубликовано. Как правило, только одна ревизия материала (текущая) имеет статус 1.
|
uid |
int |
Идентификатор пользователя, создавшего эту ревизию. Внешний ключ для таблицы users.
|
title |
varchar(255) |
Заголовок материала на момент создания этой ревизии. |
created |
int |
UNIX-время создания ревизии. |
changed |
int |
UNIX-время последнего изменения ревизии. |
promote |
tinyint |
Флаг, указывающий, promoted ли материал на главную страницу (1) или нет (0) в данной ревизии.
|
sticky |
tinyint |
Флаг, указывающий, прикреплен ли материал в начало списков (1) или нет (0) в данной ревизии.
|
default_langcode |
tinyint |
Указывает, является ли данная запись переводом (0) или записью на языке по умолчанию (1).
|
revision_translation_affected |
tinyint |
Определяет, затронута ли была данная языковая версия ревизии при её создании. Нужен для оптимизации работы с переводами. |
Как это работает
Когда пользователь редактирует материал и сохраняет его, Drupal создает новую ревизию. Метаданные об этой ревизии (кто, когда) записываются в node_revision, а данные полей (включая заголовок) этой конкретной версии сохраняются в node_field_revision.
Система использует комбинацию nid, vid и langcode для однозначной идентификации версии полей материала на определенном языке. Это позволяет хранить полную историю изменений для каждого поля и для каждого языка в отдельности.
Поле status определяет, какая именно ревизия является актуальной и должна отображаться на сайте. При создании новой ревизии старой выставляется статус 0, а новой - 1. Механизм ревизий позволяет администраторам просматривать предыдущие версии материалов и, при необходимости, откатываться к ним, делая их текущими (опубликованными).
Для многоязычных сайтов таблица node_field_revision становится особенно важной, так как в ней хранятся не только разные версии, но и разные переводы одного и того же материала. Это обеспечивает независимую историю изменений для каждого языка.
Пример SQL-запроса
Получить все ревизии (включая данные полей) для определенного материала можно следующим запросом:
SELECT nfr.*, nr.revision_uid, nr.revision_log
FROM node_field_revision nfr
JOIN node_revision nr ON nfr.vid = nr.vid AND nfr.nid = nr.nid
WHERE nfr.nid = 42
ORDER BY nfr.vid DESC, nfr.langcode;
Смотрите также
-
таблицу
node,
которая хранит основную информацию о материалах -
таблицу
node_revision,
которая хранит метаданные ревизий материалов -
таблицу
node_field_data,
которая хранит актуальные данные полей материалов -
таблицу
users,
которая хранит данные пользователей