Mysql GraphQL中的Sequelize不连接连接表
我有以下表格: 使用者 身份证件 名称 电子邮件 用户\类别\数据 身份证件 标签 用户类别连接表 身份证件 用户id 猫咪 一个用户只能有一个类别。我试图在GraphQL中查询用户内部的类别,以便直接获得类别标签和id:Mysql GraphQL中的Sequelize不连接连接表,mysql,sequelize.js,graphql,Mysql,Sequelize.js,Graphql,我有以下表格: 使用者 身份证件 名称 电子邮件 用户\类别\数据 身份证件 标签 用户类别连接表 身份证件 用户id 猫咪 一个用户只能有一个类别。我试图在GraphQL中查询用户内部的类别,以便直接获得类别标签和id: { users(id: 6988) { email category { id label } } } 以下是协会: 使用者 用户分类数据 用户类别连接表 这将在用户的GraphQL类型的resolve函数中创建g
{
users(id: 6988) {
email
category {
id
label
}
}
}
以下是协会:
使用者
用户分类数据
用户类别连接表
这将在用户的GraphQL类型的resolve函数中创建getUserCategoryDatum函数。当我运行它时,我会得到以下查询:
SELECT `id`, `email`, `name` FROM `users` AS `user` WHERE `user`.`id` = 6988 ORDER BY `user`.`id` ASC;
SELECT `id`, `label`, `user_id` FROM `users_categories_data` AS `userCategoryData` WHERE `userCategoryData`.`user_id` IN (6988);
显然,这是不正确的,因为users\u categories\u数据表没有user\u id。查询应该进行额外的连接,从连接表中获取cat\u id,然后使用其中的userCategoryData.id=cat\u id查询users\u categories\u数据
我做错了什么?belongtomany是一种关系,定义为用户有许多类别,类别有许多用户 在您的情况下,例如,用户属于一个类别,而类别有多个用户,您应该向用户表中添加一个类别id,并创建User.belongsToCategory关系。
这样,您就表达了您的约束:用户属于一个类别,并且只有一个。HasOne关系通常不使用联接表建模。您需要此联接表吗?将hasOne更改为BELONGTOMANY有效。但是,如果我想在连接表上为user_id设置一个唯一的约束,该怎么办?我还应该用belongtomany吗?不,你不应该。归属关系定义为用户有多个类别,类别有多个用户。在您的情况下,例如,用户属于一个类别,而类别有多个用户,您应该向用户表中添加一个类别id,并创建User.belongsToCategory关系。通过这种方式,您表达了您的约束:一个用户属于一个类别,并且只属于一个类别。这就是我创建db结构的方式,但我被告知我们必须对其进行未来验证,以防PO希望用户选择多个类别。那我就坚持下去了。我还使用了“userCategory”,这样就不会使生成的函数多元化。请提交你的答案,我会批准的。谢谢!伟大的做它
associate: (models) => {
UserCategoryData.belongsToMany(models.user, {
through: models.userCategory,
foreignKey: 'cat_id',
});
}
associate: (models) => {
UserCategory.belongsTo(models.user, { foreignKey: 'user_id' });
UserCategory.belongsTo(models.userCategoryData, { foreignKey: 'cat_id' });
},
SELECT `id`, `email`, `name` FROM `users` AS `user` WHERE `user`.`id` = 6988 ORDER BY `user`.`id` ASC;
SELECT `id`, `label`, `user_id` FROM `users_categories_data` AS `userCategoryData` WHERE `userCategoryData`.`user_id` IN (6988);