如何使用sequelize和Graphql正确解析查询MySql

如何使用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

我正在学习GraphQL,并试图通过GraphQL上resolve函数中的sequelize从MySql表中获取数据。我有一个与Pets表关联的Clients表,其中Pets属于Client。 这是我的密码:

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;
};