gpt4 book ai didi

graphql - 是否可以使用 GraphQLList 从多个表中获取数据

转载 作者:行者123 更新时间:2023-12-03 22:26:59 26 4
gpt4 key购买 nike

在 GraphQL 中,我们可以在 GraphQLList 中编写对象类型并获取所有字段。我正在使用 Association 并且它正在加入两个表,但我无法获取两个表的字段。它只需要我在 GraphQLList 中编写的字段。因为我想要数据列表。

这是代码

films table:

module.exports =(sequelize, DataTypes) => {
const films = sequelize.define(
'films',
{
id:{
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,

},
name: {
type: DataTypes.STRING,

},
},

);

films.associate = (models) => {


films.hasMany(models.movie_stream, {
foreignKey: 'movie_id',
});

};

return films;

}

movie_stream table:

module.exports = (sequelize, DataTypes) => {
const movie_streams = sequelize.define('movie_streams', {
id:{
type: DataTypes.INTEGER,
primaryKey: true,
allowNull: false,
},
movie_id: {
type: DataTypes.STRING,
foreignKey: "movie_id",

},
});

movie_streams.associate = (models) => {

movie_streams.hasMany(models.films, {
foreignKey: 'id',
});
};

return movie_streams;
};

Schema file:

movieList:{
type: new GraphQLList(Films),
resolve: (parent,args)=>{
return newdb.films.findAll({attributes:['id','name','permalink'],
where: {content_category_value:parent.id },
include: [{
model:newdb.movie_stream,
attributes:['id','movie_id'],
}],
}).then(data=>{
return data;
})
}

我可以在这里写类型:new GraphQLList(Films, MovieStream)??

我已经尝试过,但它不起作用。请给我一些想法如何获取两个表的字段???

最佳答案

在 GraphQL 中有两种主要的实现方式:联合和接口(interface)。

接口(interface)是 GraphQL 模式中的两个或多个对象类型共享某些字段(特征)的地方。例如,您可能有一个 Product您商店中所有商品的界面,其中每件商品都有 price , barcode , 和 shelfLocation .您的所有产品,例如 Shampoo , Bread , LawnChair然后会实现这个接口(interface)。

interface Product {
price: Float
barcode: Int
shelfLocation: ShelfLocation
}

type Bread implements Product {
price: Float
barcode: Int
shelfLocation: ShelfLocation
brand: String
numberOfSlices: Int
calories: Float
bestBefore: Date
}

extend type Query {
searchProducts(phrase: String!): [Product!]
}

联合是您声明某些东西可以返回多个对象类型的地方,但这些类型不必具有任何共同的属性。
type Shark {
name: String
numberOfTeeth: Int
}

type Shoe {
brand: String
size: String
}

union SharkOrShoe = Shark | Shoe

extend type Query {
searchSharksAndShoes(phrase: String!): [SharkOrShoe!]
}

在这两种情况下,您都可以使用片段或内联片段查询类型特定字段:
query {
searchProducts(phrase: "tasty") {
# shared fields
__typename
price
barcode
shelfLocation { aisle, position }

# type specific fields
... on Bread { brand }
...breadFrag
}
searchSharksAndShoes(phrase: "sleek") {
# only the introspection fields are shared in a union
__typename

# type specific fields
... on Shark { name, numberOfTeeth }
...shoeFrag
}
}

fragment breadFrag on Bread {
barcode
bestBefore
}

fragment shoeFrag on Shoe {
brand
size
}

您可以在 GraphQL schema documentation 中了解更多信息。并阅读 GraphQLInterfaceTypeGraphQLUnionType在 GraphQL.js 文档中。

关于graphql - 是否可以使用 GraphQLList 从多个表中获取数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55117230/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com