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

Directus 8.8.1中GraphQL多对多关联数据查询问题

解决Directus 8.8.1 GraphQL多对多关联查询问题

我之前也踩过Directus 8里GraphQL多对多查询的这个坑,你的问题核心是多对多关联在GraphQL里是通过中间连接表暴露的,而不是直接返回目标集合的条目。

你看到的错误Cannot query field "name" on type "FestivalArtistItem",是因为festival下的artists字段返回的是Festival和Artists之间的中间连接表条目,也就是FestivalArtistItem类型——这个类型本身并没有name字段,name是属于Artists集合的字段,你得通过中间表的关联字段去获取。

正确的查询语句

把你的查询修改成这样,通过中间表的关联字段(通常是目标集合的单数形式,比如artist)来获取Artists的字段:

query FestivalList($size: Int = 2, $skip: Int = 0) { 
  model: festival(limit: $size, offset: $skip) { 
    data { 
      festivalId 
      name 
      artists { 
        artist {  # 这个字段指向Artists集合的具体条目
          name 
          # 这里可以添加更多Artists集合的字段,比如id、bio等
        } 
      } 
    } 
  } 
}

为什么要这么写?

Directus 8在处理多对多关联时,会自动生成一个中间连接表(比如festival_artists),对应的GraphQL类型就是FestivalArtistItem。这个类型的作用是关联Festival和Artists两个集合,它本身只包含关联的外键字段,以及指向两个集合的关联引用。所以你必须通过这个引用字段(比如artist)才能拿到Artists集合的具体数据。

如果不确定这个关联字段的名称,你可以在Directus的GraphQL Playground里执行类型查询,查看FestivalArtistItem的结构:

query {
  __type(name: "FestivalArtistItem") {
    fields {
      name
      type {
        name
      }
    }
  }
}

执行后就能看到这个类型包含哪些可以用来关联到Artists的字段了。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 21:37:39