在保存父项时,会自动保存关联对象
鉴于以下模型:
var Project = sequelize.define('project', {/* ... */}) var Task = sequelize.define('task', {/* ... */}) Project.hasMany(Task, {as: 'Tasks'}); Task.belongsTo(Project);
在保存项目时,如何更改任务并更新数据库。
Project.findById(1, {include: Task, as: 'tasks'}).then(function(project) { project.tasks.each(function(task) { task.status = 'done'; }); project.status = 'closed'; project.updatedBy = 'user'; // ...many more statements that modify the project and tasks for example project.save(); // << I want this to save the whole hierarchy to the database, similar to how Hibernate does it, if some people are familiar });
当调用project.save()
,任务不会更新。 为什么?
如果您使用find
或findAll
,则可以按照Eager loading中所述利用急切加载 。
要做到这一点,你需要使用的属性include
: include: [Task]
这样你有一个内部连接,不需要查询任务。
根据你的代码,你可以有:
(我现在不能testing这个代码,对不起,如果它不完美):
Project.find({ where: {id: 1}, include: [{model: Task, as: 'task'}]}) .then(function(project) { project.task[0].updateAttributes({ status = 'done'; }).then(function() { //done! }); });
这个答案可能也有帮助。