node-sequelize学习笔记三(利用模型作为类、实例模型)
1、利用模型作类
class User extends Model { static classLevelMethod() { return 'foo'; } instanceLevelMethod() { return 'bar'; } getFullname() { return [this.firstname, this.lastname].join(' '); } } User.init({ firstname: Sequelize.TEXT, lastname: Sequelize.TEXT }, { sequelize }); console.log(User.classLevelMethod()); // 'foo' const user = User.build({ firstname: 'Jane', lastname: 'Doe' }); console.log(user.instanceLevelMethod()); // 'bar' console.log(user.getFullname()); // 'Jane Doe'
2、实例模型
const jane = User.build({ name: "Jane" }); console.log(jane instanceof User); // true console.log(jane.name); // "Jane"
但是,以上代码根本无法与数据库通信(请注意,它甚至不是异步的)! 这是因为 build
方法仅创建一个对象,该对象 表示 可以 映射到数据库的数据. 为了将这个实例真正保存(即持久保存)在数据库中,应使用 save
方法:
await jane.save();
console.log('Jane 已保存到数据库!');
Sequelize提供了 create
方法,该方法将上述的 build
方法和 save
方法合并为一个方法:
const jane = await User.create({ name: "Jane" }); // Jane 现在存在于数据库中! console.log(jane.toJSON()); console.log(jane.name); // "Jane"
3、更新实例
const jane = await User.create({ name: "Jane" }); console.log(jane.name); // "Jane" jane.name = "Ada"; // 数据库中的名称仍然是 "Jane" await jane.save(); // 现在该名称已在数据库中更新为 "Ada"!
4、删除实例
const jane = await User.create({ name: "Jane" }); console.log(jane.name); // "Jane" await jane.destroy(); // 现在该条目已从数据库中删除
5、重载实例
const jane = await User.create({ name: "Jane" }); console.log(jane.name); // "Jane" jane.name = "Ada"; // 数据库中的名称依然是 "Jane" await jane.reload(); console.log(jane.name); // "Jane"
6、仅保存部分字段
通过传递一个列名数组,可以定义在调用 save
时应该保存哪些属性.
当你基于先前定义的对象设置属性时,例如,当你通过 Web 应用程序的形式获取对象的值时,这很有用. 此外,这在 update
实现中内部使用. 它是这样的:
const jane = await User.create({ name: "Jane" }); console.log(jane.name); // "Jane" console.log(jane.favoriteColor); // "green" jane.name = "Jane II"; jane.favoriteColor = "blue"; await jane.save({ fields: ['name'] }); console.log(jane.name); // "Jane II" console.log(jane.favoriteColor); // "blue" // 上面显示为 "blue",因为本地对象将其设置为 "blue", // 但是在数据库中它仍然是 "green": await jane.reload(); console.log(jane.name); // "Jane II" console.log(jane.favoriteColor); // "green"
7、递增和递减整数值
const jane = await User.create({ name: "Jane", age: 100 }); const incrementResult = await jane.increment('age', { by: 2 }); // 注意: 如只增加 1, 你可以省略 'by' 参数, 只需执行 `user.increment('age')` const jane = await User.create({ name: "Jane", age: 100, cash: 5000 }); await jane.increment({ 'age': 2, 'cash': 100 }); // 如果值增加相同的数量,则也可以使用以下其他语法: await jane.increment(['age', 'cash'], { by: 2 });