Стажировка на реальных проектах:
наполнение портфолио, помощь с работой и заказами, пробные собеседования. Жми для подробностей→
4 of 182 menu
Бесплатный курс по Верстке. От новичка до продвинутого верстальщика! Начало 11 ноября. Жми для записи!

Таблица 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,
    которая хранит данные пользователей