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 });

浙公网安备 33010602011771号