我是 Sequelize 的新手,正在努力理解这个非常奇怪的 ORM 新世界是如何工作的。曾经我似乎无法理解的是 Sequelizejs 中“.create”和“.save”之间的区别。我用这两种方法编写了测试函数,除了语法略有不同外,它们似乎做的事情完全相同。
这是使用“.save”方法
models.User.build({
username: req.body.username,
password: req.body.password,
first_name: req.body.firstName,
last_name: req.body.lastName
})
.save()
.then(function(task){
// some function...
})
.catch(function(error){
// some function...
});
这是使用“.create”方法
models.User.create({
username: req.body.username,
password: req.body.password,
first_name: req.body.firstName,
last_name: req.body.lastName
}).then(function(data) {
// some function...
});
我在这里没有看到什么?
最佳答案
如文档中所述 http://docs.sequelizejs.com/en/latest/docs/instances/
方法.build()创建了一个非持久化实例,也就是说数据还没有保存到数据库中,只是保存在内存中, 在执行过程中。当您的程序停止时(服务器崩溃、执行结束或类似情况),使用 .build() 创建的实例将丢失。
这是 .save() 发挥作用的地方。它将通过.build()方法构建的实例数据存储在数据库中。
这种方法允许您在将实例存储到数据库之前以您需要的方式对其进行操作。
.create() 方法只是.build() 和.save() 同一命令中的一个实例。对于不需要操作实例的简单情况,这很方便,允许您使用单个命令将数据存储在数据库中。举例说明:
这个:
User.build({ name: "John" }).save().then(function(newUser){
console.log(newUser.name); // John
// John is now in your db!
}).catch(function(error){
// error
});
与此相同:
User.create({ name: "John"}).then(function(newUser){
console.log(newUser.name); // John
// John is now in your db!
}).catch(function(error){
// error
});
但是你可以这样做:
var user = User.build({ name: "John"}); // nothing in your db yet
user.name = "Doe"; // still, nothing on your db
user.save().then(function(newUser){
console.log(newUser.name); // Doe
// Doe is now in your db!
}).catch(function(error){
// error
});
基本上,.build() 和 .save() 使您能够在实例化之后但在将其数据存储在数据库。
关于mysql - Sequelizejs 中的 .save 和 .create 有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30002321/