Таблица comment_field_data
Таблица comment_field_data является основной таблицей для хранения данных комментариев в Drupal. Она содержит обработанные и готовые для отображения данные, в отличие от таблицы comment, которая хранит базовую структурную информацию. Эта таблица автоматически обновляется при изменении любых данных комментария.
Поля
| Поле | Тип данных | Описание |
|---|---|---|
cid |
int |
Уникальный идентификатор комментария. Первичный ключ, ссылается на comment.cid.
|
comment_type |
varchar(32) |
Тип комментария (бандл). Определяет, к какому типу контента принадлежит комментарий. |
langcode |
varchar(12) |
Языковой код комментария. Определяет язык, на котором написан комментарий. |
status |
tinyint |
Статус публикации комментария: 1 - опубликован, 0 - не опубликован.
|
uid |
int |
Идентификатор пользователя, который создал комментарий. Ссылается на users.uid.
|
pid |
int |
Идентификатор родительского комментария (если есть). Для древовидной структуры комментариев. Ссылается на comment.cid.
|
entity_id |
int |
Идентификатор сущности (ноды), к которой оставлен комментарий. Ссылается на node_field_data.nid.
|
subject |
varchar(255) |
Заголовок комментария. |
name |
varchar(60) |
Имя автора комментария (если комментарий оставлен анонимным пользователем). |
mail |
varchar(254) |
Email автора комментария (для анонимных пользователей). |
homepage |
varchar(255) |
Домашняя страница автора комментария (для анонимных пользователей). |
hostname |
varchar(128) |
IP-адрес или хост автора комментария. |
created |
int |
Временная метка создания комментария (Unix timestamp). |
changed |
int |
Временная метка последнего изменения комментария (Unix timestamp). |
thread |
varchar(255) |
Строка, определяющая положение комментария в древовидной структуре. Используется для сортировки вложенных комментариев. |
entity_type |
varchar(32) |
Тип сущности, к которой прикреплен комментарий (обычно node).
|
field_name |
varchar(32) |
Название поля, к которому прикреплен комментарий. |
default_langcode |
tinyint |
Флаг, указывающий является ли язык комментария языком по умолчанию: 1 - да, 0 - нет.
|
Как это работает
Когда пользователь оставляет комментарий к материалу (ноде), система создает запись в базовой таблице comment, а затем обновляет таблицу comment_field_data, где хранятся все обработанные данные для отображения. Эта таблица оптимизирована для запросов на выборку комментариев.
Поле thread использует специальный формат (например, 01/, 01/01/, 01/02/) для организации древовидной структуры комментариев. Это позволяет эффективно сортировать и отображать вложенные комментарии без рекурсивных SQL-запросов.
Для анонимных пользователей данные сохраняются в полях name, mail и homepage. Для зарегистрированных пользователей эти поля обычно пустые, а информация об авторе берется из таблицы пользователей через uid.
Статус комментария (status) управляет видимостью комментария на сайте. Комментарии со статусом 0 не отображаются для обычных пользователей до тех пор, пока не будут одобрены модератором.
Пример SQL-запроса
Получить все опубликованные комментарии для конкретной ноды с информацией об авторах:
SELECT cfd.cid, cfd.subject, cfd.created, u.uid, u.name as username, nfd.title as node_title
FROM comment_field_data cfd
INNER JOIN users_field_data u ON cfd.uid = u.uid
INNER JOIN node_field_data nfd ON cfd.entity_id = nfd.nid
WHERE cfd.entity_id = 123
AND cfd.status = 1
ORDER BY cfd.created DESC;
Смотрите также
-
таблицу
comment,
которая содержит базовую структурную информацию о комментариях -
таблицу
comment__comment_body,
которая хранит основной текст комментариев -
таблицу
node_field_data,
которая содержит данные материалов (нод), к которым оставляются комментарии -
таблицу
users_field_data,
которая хранит данные пользователей - авторов комментариев