如何使用sequelize和Graphql正确解析查询MySql
我正在学习GraphQL,并试图通过GraphQL上resolve函数中的sequelize从MySql表中获取数据。我有一个与Pets表关联的Clients表,其中Pets属于Client。 这是我的密码:如何使用sequelize和Graphql正确解析查询MySql,mysql,graphql,sequelize.js,Mysql,Graphql,Sequelize.js,我正在学习GraphQL,并试图通过GraphQL上resolve函数中的sequelize从MySql表中获取数据。我有一个与Pets表关联的Clients表,其中Pets属于Client。 这是我的密码: const PetsType = new GraphQLObjectType({ name: "Pet", fields: () => ({ id: { type: GraphQLString }, name: { type: Grap
const PetsType = new GraphQLObjectType({
name: "Pet",
fields: () => ({
id: { type: GraphQLString },
name: { type: GraphQLString },
breed: { type: GraphQLString },
type: { type: GraphQLString },
ClientId: { type: GraphQLString },
Comments: {
type: CommentsType,
resolve(parentValue, args) {
return db.Comments;
}
}
})
});
const ClientType = new GraphQLObjectType({
name: "Client",
fields: () => ({
id: { type: GraphQLString },
lastName: { type: GraphQLString },
firstName: { type: GraphQLString },
primaryPhoneNumber: { type: GraphQLString },
cellphone: { type: GraphQLString },
workPhone: { type: GraphQLString },
email: { type: GraphQLString },
Pets: {
type: PetsType,
resolve(parentValue, args) {
return db.Pet.findOne({
where: { ClientId: parentValue.id }
});
}
}
})
});
使用findOne适用于只有一只宠物的客户,或者只返回拥有多只宠物的客户的第一只宠物。然而,有些客户有不止一个宠物,所以findOne()并不能真正解决我的问题。
我试过:
return db.Pet.findAll({
where: { ClientId: parentValue.id }
});
但它返回的客户机字段为空
以下是我为客户和宠物设计的续集模型:
客户:
宠物:
module.exports = function(sequelize, DataTypes) {
var Pet = sequelize.define(
"Pet",
{
name: {
type: DataTypes.TEXT,
allowNull: false,
len: [1]
},
breed: {
type: DataTypes.TEXT,
allowNull: false,
len: [1]
},
type: {
type: DataTypes.TEXT,
allowNull: true
}
},
{
timestamps: false
}
);
Pet.associate = function(models) {
Pet.belongsTo(models.Client);
Pet.hasMany(models.Comment, {
onDelete: "cascade"
});
};
return Pet;
};
如何检索属于此客户的所有宠物?
提前感谢。正如Daniel Rearden建议的那样,我将其更改为:type:new graphqlist(PetsType)以返回对象列表如果该字段应该返回一个对象数组,有什么理由不使用列表类型吗?您是对的:type:new graphqlist(PetsType)谢谢先生,这一小小的更改起到了作用
module.exports = function(sequelize, DataTypes) {
var Pet = sequelize.define(
"Pet",
{
name: {
type: DataTypes.TEXT,
allowNull: false,
len: [1]
},
breed: {
type: DataTypes.TEXT,
allowNull: false,
len: [1]
},
type: {
type: DataTypes.TEXT,
allowNull: true
}
},
{
timestamps: false
}
);
Pet.associate = function(models) {
Pet.belongsTo(models.Client);
Pet.hasMany(models.Comment, {
onDelete: "cascade"
});
};
return Pet;
};