Я создал две модели следующим образом
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"
}
}
}
})
UserType
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
INTEGER PRIMARY KEY AUTOINCREMENT, name
VARCHAR (30) NOT NULL, email
VARCHAR (30) NOT NULL UNIQUE, password
VARCHAR (255) NOT NULL , createdAt
DATETIME NOT NULL, updatedAt
DATETIME NOT NULL);
Я видел объявление ассоциации обоими способами, например:
UserModel.hasOne(UserType, { foreignKey: { allowNull : false }, onDelete: "CASCADE" })
UserType.hasMany(UserModel, { foreignKey: { allowNull : false }, onDelete: "CASCADE" })
В этом случае SQL
генерируется следующим образом
СОЗДАТЬ ТАБЛИЦУ, ЕСЛИ НЕ СУЩЕСТВУЕТ users
(id
INTEGER PRIMARY KEY AUTOINCREMENT, name
VARCHAR (30) NOT NULL, lastName
VARCHAR (30) NOT NULL, email
VARCHAR (30) NOT NULL UNIQUE , password
VARCHAR (255) NOT NULL, createdAt
DATETIME NOT NULL, updatedAt
DATETIME NOT NULL, userTypeId
INTEGER NOT NULL ССЫЛКИ userTypes
(id
) НА УДАЛИТЬ КАСКАД НА ОБНОВЛЕНИЕ КАСКАД);
Даже если я поставлю только строку, внешний ключ создается в SQL
UserType.hasMany(UserModel, { foreignKey: { allowNull : false }, onDelete: "CASCADE" })
Я прочитал hasOne doc / выпуск . В выпуске github говорится, что документ должен быть обновлен (@ 2014). Так что же делает текущая hasOne
ассоциация?
Еще одна вещь, я знаю, что для получения связанных моделей требуется двусторонняя ассоциация ссылка , но мне не нужна обратная ассоциация, такая как выборка всех user
с учетом их status
, поэтому я объявляю только одностороннюю ассоциацию.