【发布时间】:2021-01-06 15:22:32
【问题描述】:
我正在使用 NodeJS 并进行续集。
我有一个名为duel_id 的列的用户表,每个用户一次可以分配到一个决斗。
每个决斗可以有多个用户。
我有以下用户模型:
const User = Model.define(
'User',
{
user_id: {
type: DataType.INTEGER,
primaryKey: true,
},
username: {
type: DataType.STRING(255),
},
character: {
type: DataType.INTEGER,
},
duel_id: {
type: DataType.INTEGER,
},
},
{
indexes: [{ fields: ['user_id', 'username'] }],
tableName: 'users',
timestamps: false,
},
);
User.hasOne(Duel, { as: 'duel', foreignKey: 'id', sourceKey: 'duel_id' });
使用以下决斗模型:
const Duel = Model.define(
'DuelRoom',
{
id: {
type: DataType.INTEGER,
primaryKey: true,
autoIncrement: true,
},
round_id: {
type: DataType.INTEGER,
},
status: {
type: DataType.STRING,
},
turn_of_user_id: {
type: DataType.INTEGER,
},
winner: {
type: DataType.STRING,
},
},
{
indexes: [{ fields: ['id'] }],
tableName: 'duel_rooms',
timestamps: true,
},
);
上面的代码有效,如果他有一个用户和相关的决斗,则返回。
我还想将所有关联到同一个决斗的用户返回。
我尝试将关系与hasMany/belongsTo 联系起来,但没有成功。出现以下错误:
Error: DuelRoom.hasMany called with something that's not a subclass of Sequelize.Model
我希望能够查询得到这样的数据:
user: {
user_id,
username
duel: {
round_number
players: [{user_id, username}]
}
}
获取当前用户的决斗信息,所有玩家都与同一个duel_id 关联为一个名为players 的数组。
知道如何使用 sequelize 定义这种关系以返回与用户决斗相关的所有用户吗?
【问题讨论】:
标签: node.js orm sequelize.js