【问题标题】:How to properly use nested include query with sequelize in nodes(mysql)如何在节点(mysql)中正确使用带有sequelize的嵌套包含查询
【发布时间】:2019-05-19 22:09:21
【问题描述】:

如何在 sequelize(nodejs) 中正确使用嵌套包含查询

我的带有 sequelize 的嵌套包含查询给了我这个错误

"category is associated to course using an alias. You've included an alias (Category), but it does not match the alias defined in your association."

我想要的是从用户列表中,我想获得所有的课程,然后从那里,我将获得所有的课程,然后我想从那里获得所有类别的列表

我不知道我做错了什么,我只需要它工作,对nodejs还是新手

这里是代码

export default {
  Query: {
    users: combineResolvers(isAdmin, async (parent, args, { models }) => {
      return await models.User.findAll();
    }),
  },  
  User: { 
    messages: async (user, args, { models }) => {
      return await models.Message.findAll({
        where: { userId: user.id }, 
      });
    },     
    tcourses: async (user, args, { models }) => {
      return await models.TCourses.findAll({
        where: { UserId: user.id },
        include: [{model: models.Course, as: 'Course', include: [{model: models.Category, as: 'Category'}]}]
      })
    }
  },
}

这是我的课程模型代码

const tcourses = (sequelize, DataTypes) => {
    const TCourses = sequelize.define('tcourses', {
        id: {
            type: DataTypes.INTEGER,
            autoIncrement: true,
            unique: true,
            primaryKey: true,
            field: 'id'
        },
    }, {
        timestamps: false
    });

    TCourses.associate = models => {
        TCourses.belongsTo(models.Course,{ as: 'Course', required: false})
        TCourses.belongsTo(models.User,{ as: 'User'})
    };
    return TCourses;
};
export default tcourses;

这是我的课程模型代码

const course = (sequelize, DataTypes) => {
    const Course = sequelize.define('course', {
        Title: {
            type: DataTypes.STRING,
            validate: {
                notEmpty: {
                    args: true,
                    msg: 'Enter Course Title'
                }
            }, 
        },
    }, {
        timestamps: false
    })
    Course.associate = models => {
        Course.belongsTo(models.Category, { as: 'Cat'})
        Course.hasMany(models.Requirements,{onDelete: 'CASCADE', foreignKey: 'CourseId'})
        Course.belongsTo(models.User, { as: 'Owners'})
        Course.hasMany(models.Audience,{onDelete: 'CASCADE', foreignKey: 'CourseId'})
        Course.hasMany(models.TCourses,{onDelete: 'CASCADE', foreignKey: 'CourseId'})
    };
    return Course
  }; 
  export default course

这是我的类别型号代码

const category = (sequelize, DataTypes) => {
    const Category = sequelize.define('category', {
            catName: {
                type: DataTypes.STRING,
                validate: {
                    notEmpty: {
                        args: true,
                        msg: 'Enter Category name'
                    }
                },
            },
    }, {
            timestamps: false
    });

    Category.associate = models => {
        Category.hasMany(models.Course,{onDelete: 'CASCADE',  foreignKey: 'CatId'})
        Category.hasMany(models.TCategory,{onDelete: 'CASCADE', foreignKey: 'CategoryId'})
    };
    return Category;
};

  export default category;

请问我怎样才能让它工作

【问题讨论】:

    标签: javascript mysql node.js sequelize.js


    【解决方案1】:

    您必须在包含语句和定义关联时为模型提供相同的别名。

    错误也说明了,

    "category is associated to course using an alias. You've included an alias (Category), but it does not match the alias defined in your association."
    

    在查询数据库时,您已将类别表的别名指定为 Category

    models.TCourses.findAll({
        where: { UserId: user.id },
        include: [{model: models.Course, as: 'Course', include: [{model: models.Category, as: 'Category'}]}]
      })
    

    在 Course 模型中,您已将关联定义为 Cat

    Course.belongsTo(models.Category, { as: 'Cat'})
    

    现在你必须使它相同,即在两个地方都使用 CatCatgory

    【讨论】:

      猜你喜欢
      • 2015-06-03
      • 2020-06-04
      • 2012-03-13
      • 2020-05-30
      • 1970-01-01
      • 2015-11-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多