sequelizejs如何在save/create时设置关联?

How to set association at the time of save/create in sequelizejs?

对于像这样的简单模型:

var User = sequelize.define('User', { email: Sequelize.STRING });
var Team = sequelize.define('Team', { name: Sequelize.STRING });
User.belongsTo(Team);

Team.create({name:'blah'});

你如何存储一个新用户并同时设置它的TeamId(这里的同时是指在一个INSERT中)

这对于 REFERENCE 是强制性的(NOT NULL)并且通常 user.setTeam(team) 在 INSERT 不起作用后生成 UPDATE 的情况很重要。

显然 User.create({ email: 'x', team: team }) 中作为 属性 的额外团队将被忽略,以下内容:

var user = User.build({email:'x'});
user.setTeam(team);
user.save();

生成一个额外的完全错误的 INSERT:

INSERT INTO `Users` (`TeamId`,`updatedAt`,`createdAt`) 
VALUES (4,'2015-08-19 18:10:36','2015-08-19 18:10:36');  
-- has no id or email

老问题,但也许有人会从这个答案中受益。

假设你要添加的team实例已经保存在数据库中,你可以添加save参数设置为false,添加关联时:

var user = User.build({email:'x'});
user.setTeam(team, {save: false});
user.save();

我花了很长时间寻找那个解决方案,我不知道为什么文档没有提到它(或者我在那里找不到它)