sequelize.js中的新手
我有两个模型:User
和Organization
,我正在尝试模拟用户可以是一个组织的管理员,组织只能有一个管理员(一个- belongsTo()
关联。
这里是定义模型的方式:
const User = sequelize.define(
"User",
{
firstName: Sequelize.STRING,
lastName: Sequelize.STRING
},
{ underscored: true }
);
const Organization = sequelize.define(
"Organization",
{
name: Sequelize.STRING
},
{ underscored: true }
);
Organization.belongsTo(User, {
as: "admin",
foreignKey: {
allowNull: false
}
});
这是我想按顺序执行的操作:
问题:
它不允许我将已经存在的用户指定为admin。
这是我尝试的方法:(通过查看文档和其他示例)
1。
// step 1
await User.create({
firstName: "John",
lastName: "Doe"
});
// step 2
const adminToSet = await User.findOne({ where: { firstName: "John" } });
await Organization.create(
{
name: "my-awesome-organization",
User: adminToSet
},
{
include: [{ model: User, as: "admin" }]
}
);
给我一个错误,说'Organization.admin_id cannot be null'
2。
// step 1
await User.create({
firstName: "John",
lastName: "Doe"
});
// step 2
const adminToSet = await User.findOne({ where: { firstName: "John" } });
const org = Organization.build({
name: "my-awesome-organization"
});
org.setAdmin(adminToSet);
给我一个错误,说id = id || results && results[0][this.getInsertIdField()];
(似乎是mssql
->我正在使用的方言)
请帮助!
这是完整的代码段:
const Sequelize = require("sequelize");
const connectionOptions = {
username: "sa",
password: "Test@123",
dialect: "mssql",
host: "localhost",
port: 1433,
operatorsAliases: false,
benchmark: true,
pool: {
max: 5,
min: 0,
acquire: 30000,
idle: 10000
},
// Dialect specific options. These will be passed to the db driver
dialectOptions: {
encrypt: false
}
};
const sequelize = new Sequelize(connectionOptions);
const User = sequelize.define(
"User",
{
firstName: Sequelize.STRING,
lastName: Sequelize.STRING
},
{ underscored: true }
);
const Organization = sequelize.define(
"Organization",
{
name: Sequelize.STRING
},
{ underscored: true }
);
Organization.belongsTo(User, {
as: "admin",
foreignKey: {
allowNull: false
}
});
const createUserAndOrganization = async () => {
// step 1
await User.create({
firstName: "John",
lastName: "Doe"
});
// step 2
const adminToSet = await User.findOne({ where: { firstName: "John" } });
const org = Organization.build({
name: "my-awesome-organization"
});
org.setAdmin(adminToSet);
};
const authenticated = async () => {
try {
await sequelize.sync({ force: true });
await createUserAndOrganization();
} catch (e) {
console.error(e);
}
};
sequelize
.authenticate()
.then(authenticated)
.catch(err => {
console.log(`[${err.name}]`, `[${err.original.code}]`, `${err.original.message}`);
});