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

Drupal 7节点关联文件的数据库表查询及CMS数据迁移需求

获取Drupal 7节点关联文件列表的方法

核心逻辑

Drupal 7的文件/附件字段采用动态字段表存储,每个附件字段对应独立的field_data_field_XXX表(XXX为字段名,比如field_attachments),节点与文件的关联关系就存在这些表中,而非直接存储在file_managed或media_field_data里。

具体操作步骤

  1. 确定目标节点的内容类型
    先查询节点135的内容类型,缩小字段表范围:

    SELECT type FROM node WHERE nid = 135;
    

    假设返回结果为news(即该节点属于新闻内容类型)。

  2. 定位对应的附件字段表
    在数据库中查找所有以field_data_field_开头的表,筛选出bundle字段值为news(上一步得到的内容类型)且entity_type为node的表,这些表就是该内容类型的字段存储表。
    常见的表名比如field_data_field_pdf_attachments、field_data_field_media_files,其中的field_XXX就是附件字段的名称。

  3. 查询节点关联的文件数据
    以找到的field_data_field_attachments表为例,执行以下SQL关联file_managed表获取文件详情:

    SELECT 
      fm.fid, 
      fm.filename, 
      fm.uri, 
      fm.filemime, 
      fm.created
    FROM field_data_field_attachments fa
    LEFT JOIN file_managed fm ON fa.field_attachments_fid = fm.fid
    WHERE fa.entity_type = 'node' AND fa.entity_id = 135;
    

    如果网站使用了Media模块,需要额外关联media表:

    SELECT 
      m.mid,
      fm.fid, 
      fm.filename, 
      fm.uri, 
      fm.filemime, 
      fm.created
    FROM field_data_field_media_attachments fa
    LEFT JOIN media m ON fa.field_media_attachments_fid = m.mid
    LEFT JOIN file_managed fm ON m.fid = fm.fid
    WHERE fa.entity_type = 'node' AND fa.entity_id = 135;
    

通用查询方法(快速定位所有关联文件)

如果不确定字段名,可以逐个排查field_data_field_开头的表,每个表执行类似步骤3的查询;或者用以下SQL遍历所有可能的字段表:

SELECT DISTINCT
  fm.fid,
  fm.filename,
  fm.uri,
  fm.filemime,
  fdf.field_name
FROM file_managed fm
JOIN field_config fc ON fc.type = 'file'
JOIN field_data_field_${fc.field_name} fdf 
  ON fdf.${fc.field_name}_fid = fm.fid
WHERE fdf.entity_type = 'node' AND fdf.entity_id = 135;

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 14:37:42