You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用SQL获取本地Drupal 10实例的所有内容类型、字段及数据?

在Drupal 10中通过SQL获取内容类型及关联字段数据

Drupal的内容数据采用实体-字段的分散存储模式,无法直接通过单表获取完整内容,需要关联多个核心表来提取信息。以下是具体的SQL查询方案:

1. 获取所有内容类型的基础信息

SELECT 
  bundle AS content_type,
  name AS content_type_label
FROM node_type;

2. 获取指定内容类型(如article)的完整字段数据

以article为例,关联正文、标签、文件等常见字段的查询语句:

SELECT
  n.nid AS node_id,
  n.title,
  -- 正文字段
  b.body_value AS body_content,
  b.body_format AS body_format,
  -- 标签字段(合并多值标签的名称和ID)
  GROUP_CONCAT(DISTINCT ttd.name SEPARATOR ', ') AS tags,
  GROUP_CONCAT(DISTINCT ttd.tid SEPARATOR ', ') AS tag_ids,
  -- 文件字段(获取文件ID、路径和名称)
  fm.fid AS file_id,
  fm.uri AS file_uri,
  fm.filename AS file_name
FROM node_field_data n
-- 关联正文字段表
LEFT JOIN node__body b ON n.nid = b.entity_id AND n.vid = b.revision_id
-- 关联标签字段表及分类术语表
LEFT JOIN node__field_tags ft ON n.nid = ft.entity_id AND n.vid = ft.revision_id
LEFT JOIN taxonomy_term_field_data ttd ON ft.field_tags_target_id = ttd.tid
-- 关联文件引用字段表及文件管理表(字段名需根据实际调整)
LEFT JOIN node__field_media fm_ref ON n.nid = fm_ref.entity_id AND n.vid = fm_ref.revision_id
LEFT JOIN file_managed fm ON fm_ref.field_media_target_id = fm.fid
WHERE n.bundle = 'article'
GROUP BY n.nid, n.title, b.body_value, b.body_format, fm.fid, fm.uri, fm.filename;

3. 获取内容类型对应的字段定义信息

如果需要确认某个内容类型包含哪些字段,可以查询字段配置表:

SELECT
  fc.field_name,
  fc.type AS field_type,
  fci.label AS field_label,
  fci.bundle AS content_type
FROM field_config fc
JOIN field_config_instance fci ON fc.id = fci.field_id
WHERE fc.entity_type = 'node'
ORDER BY fci.bundle, fc.field_name;

注意事项

  • 字段表命名规则为node__[field_name],比如自定义字段field_image对应的表是node__field_image,需根据实际字段名调整查询中的表名
  • 多值字段(如标签)需用GROUP_CONCAT合并多个值
  • 若要获取所有内容类型的数据,只需去掉WHERE n.bundle = 'article'条件即可

内容的提问来源于stack exchange,提问作者bero

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 02:37:10