我创建了以下两个模型
UserModel
const UserModel = database.define("user", {
name: {
type: Sequelize.STRING(30),
allowNull: false,
validate: {
notNull: {
msg: "name is required"
},
notEmpty: {
msg: "name cannot be empty"
}
}
},
email: {
type: Sequelize.STRING(30),
allowNull: false,
unique: true,
validate: {
isEmail: {
msg: "invalid email provided"
},
notNull: {
msg: "email is required"
},
notEmpty: {
msg: "email cannot be empty"
}
}
},
password: {
type: Sequelize.STRING,
allowNull: false,
validate: {
notNull: {
msg: "password is required"
},
notEmpty: {
msg: "password cannot be empty"
}
}
}
})
用户类型
const UserType = database.define("userType", {
name: {
type : Sequelize.STRING(30),
allowNull: false,
validate: {
notNull: {
msg: "name is required"
},
notEmpty: {
msg: "name cannot be empty"
}
}
}
})
我需要的关联如下
UserModel
都应具有一个状态。
我使用sqlite
作为方言。要实现这一点,我会像下面这样编码
UserModel.hasOne(UserType, { foreignKey: { allowNull : false }, onDelete: "CASCADE" })
为此生成的SQL
正在关注
如果不存在
users
(id
整数主键自动递增,name
VARCHAR(30)不为空,password
DATETIME NOT NULL,createdAt
DATETIME NOT NULL);
我已经看到通过两种方式声明关联
updatedAt
在这种情况下,UserModel.hasOne(UserType, { foreignKey: { allowNull : false }, onDelete: "CASCADE" })
UserType.hasMany(UserModel, { foreignKey: { allowNull : false }, onDelete: "CASCADE" })
的生成方式如下
如果不存在
SQL
(users
整数主键自动递增,id
VARCHAR(30)不为空,name
VARCHAR(30)不为空,{{ 1}} VARCHAR(30)非空唯一性,lastName
VARCHAR(255)非空,password
DATETIME非空,createdAt
整数非空引用updatedAt
(userTypeId
)在删除级联时在更新级联上);
即使我只放一行,外键也会在userTypes
中创建
id
我已阅读hasOne doc / issue。在github问题中,它说应该更新文档(@ 2014)。那么当前的SQL
关联在做什么?
另一件事,我知道需要两种方式的关联才能获得相关的模型reference,但是我不需要反向方式的关联,例如获取给定UserType.hasMany(UserModel, { foreignKey: { allowNull : false }, onDelete: "CASCADE" })
的所有hasOne
,那就是为什么我只声明一种单向关联。