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
相关产品推荐
相关产品推荐

