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

