我有以下表格:
用户
users_categories_data
users_categories(联结表)
用户只能拥有一个类别。我正在尝试在GraphQL中查询用户内部的类别,以便我可以直接获取类别标签和id:
{
users(id: 6988) {
email
category {
id
label
}
}
}
以下是关联:
用户
associate(models) {
this.hasOne(models.userCategoryData, {
through: models.userCategory,
foreignKey: 'user_id',
});
}
UserCategoriesData
associate: (models) => {
UserCategoryData.belongsToMany(models.user, {
through: models.userCategory,
foreignKey: 'cat_id',
});
}
UserCategory(联结表)
associate: (models) => {
UserCategory.belongsTo(models.user, { foreignKey: 'user_id' });
UserCategory.belongsTo(models.userCategoryData, { foreignKey: 'cat_id' });
},
这会在我的用户的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_categories_data
表没有user_id
。查询应该执行额外的连接并从联结表中获取cat_id
,然后使用users_categories_data
WHERE userCategoryData.id = cat_id
我在这里做错了什么?
答案 0 :(得分:1)
BelongsToMany是一个定义为用户有许多类别的关系,而类别有很多用户。
在您的情况下,例如用户属于一个类别,而类别有许多用户,您应该向category_id
表添加Users
并创建User.belongsTo(Category)
关系。
这样,您就表达了您的约束:用户属于一个类别,只有一个。