数据库:mysql 5.5
Sequelize版本:3.30.4
用户角色模型
sequelize.define('userRole', {
uid: {
type: DataTypes.UUID,
primaryKey: true
},
name: {
type: DataTypes.STRING,
unique: true
}
},
{
freezeTableName: false,
tableName: 'user_roles'
}
)
用户模型
sequelize.define('user', {
uid: {
type: DataTypes.UUID,
primaryKey: true
},
login: {
type: DataTypes.STRING,
unique: true,
allowNull: false
}
},
{
freezeTableName: false,
tableName: 'users'
}
)
和关系
Users.belongsTo(UserRoles, { as: 'role' })
尝试插入新用户
Users.create({
uid: uuid(),
login: 'login',
password: 'password',
role: {
uid: uuid(),
name: 'admin'
}
}, {
include: [Types.UserRoles]
})
错误:userRole未与用户关联!
试图使用
role: {
uid: uuid(),
name: 'admin'
}
或
userRole: {
uid: uuid(),
name: 'admin'
}
但没有区别
如果我改变与
的关系Users.belongsTo(UserRoles)
一切都很好
答案 0 :(得分:1)
在定义与as
选项的关系时,您需要记住在执行查询时包含别名,并急切加载这些关系,因此您需要更改create()
并添加{{1} } as
中的选项:
include
答案 1 :(得分:1)
如果您在代码中使用sequelize.sync()
而不是表Users
,则会添加列UserRolesId
如果您不使用sequelize.sync()
,则需要在表'users'中添加字段'roleId',然后描述
Users.belongsTo(UserRoles, {
foreignKey: 'roleId',
constraints: false, //is's optional
as: 'post'
});
阅读额外的例子 - http://docs.sequelizejs.com/en/latest/docs/associations/