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

Drupal 9中如何通过path_alias获取Node及反向查询?

Drupal 9 原生SQL实现路径别名与Node的互查

关联关系说明

Drupal的path_alias表与node表没有中间关联表,别名和节点的关联通过path_alias.path字段实现:该字段存储对应节点的标准路径(格式为/node/[节点ID]),其中的数字部分就是node表的nid(节点ID)。path_alias.uuid是别名自身的唯一标识,和节点的UUID无关,所以用它关联节点会失败。


需求1:通过路径别名获取对应Node数据

以下SQL根据指定别名提取节点ID并关联节点表,返回节点核心数据(如需更多字段可自行添加):

-- 获取节点标题、语言等完整字段
SELECT nfd.nid, nfd.title, nfd.langcode
FROM path_alias pa
JOIN node_field_data nfd 
  ON SUBSTRING_INDEX(pa.path, '/', -1) = nfd.nid
WHERE pa.alias = '/category/hello'  -- 替换为目标别名
  AND pa.status = 1  -- 仅查询启用状态的别名
  AND pa.langcode = nfd.langcode;  -- 可选:匹配语言,避免跨语言别名干扰

如果只需要节点基础数据(不含标题等字段),可直接关联node表:

SELECT n.*
FROM path_alias pa
JOIN node n 
  ON SUBSTRING_INDEX(pa.path, '/', -1) = n.nid
WHERE pa.alias = '/category/hello'
  AND pa.status = 1;

需求2:通过Node获取对应的路径别名

根据节点ID拼接标准路径,直接匹配path_alias表获取别名:

-- 仅获取别名
SELECT pa.alias
FROM path_alias pa
WHERE pa.path = CONCAT('/node/', 25077)  -- 替换为目标节点ID
  AND pa.status = 1;

如果需要同时获取节点信息和别名,可关联node_field_data表:

SELECT nfd.title, pa.alias
FROM node_field_data nfd
JOIN path_alias pa 
  ON pa.path = CONCAT('/node/', nfd.nid)
WHERE nfd.nid = 25077  -- 替换为目标节点ID
  AND pa.status = 1
  AND pa.langcode = nfd.langcode;  -- 可选:匹配语言

内容的提问来源于stack exchange,提问作者Kyle Corbin Hurst

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.20 07:58:03