使用Sequelize,我创建了两个模型: User
和 Login
.
用户可以有多个登录,但登录必须只有一个用户,这意味着没有用户ID就无法保存登录 .
如何 .create
a一次性登录用户关联?
Current Code (Doesn't Work)
// Set up the models
var User = sequelize.define('User', {});
var Login = sequelize.define('Login', {});
Login.belongsTo(User, {
onDelete: 'cascade',
foreignKey: {
field: 'userId',
allowNull: false,
}
});
// Create the instances
var user = User.create().then(function() {
// THIS IS WHERE I WOULD LIKE TO SET THE ASSOCIATION
var login = Login.create({
userId: user.get('id')
});
)};
以上结果在 SequelizeValidationError: notNull Violation: UserId cannot be null
7 回答
假设您在用户和登录之间拥有正确的关联,您可以创建一个包含登录的用户:
你可以在这里找到更多信息:http://docs.sequelizejs.com/manual/tutorial/associations.html#creating-with-associations
首先,您需要以两种方式设置关系,如下所示:
然后,您需要正确获取promises返回的实例:
在
.then
中,回调接收上一次调用创建的模型实例 . 您需要在回调函数中指定参数 .另外一件重要的事情我想指出的是你遗漏的
var
陈述!这些很重要,但与这个问题无关 . 见Declaring variables without var keyword更新@Arwed Mett的回答
参考链接 - http://docs.sequelizejs.com/manual/tutorial/associations.html#creating-with-associations
用户登录与约束allowNull之间的关联为false . 您必须在User之前创建Login或在模型中将allowNull设置为true,并将表设置为DB(LoginId Null约束)
解
我最近有同样的问题!我有一个使用foreignKey配置的拼写错误 . 使用
field
而不是name
导致问题 .下面的更改将解决它 .
另外,您还可以将您的创作嵌套为更加有效和简洁 .
如下所示:https://github.com/sequelize/sequelize/issues/7252