Sequelize之Model模型定义

概念

模型是Sequelize中的重要部分。是数据库表的一个抽象。在Sequelize中,模型是一个继承了Model的类。

Sequelize中每个模型都有一个名字,这个名字可以不用与数据库表名字相同。默认情况下,数据库表名字是模型名字的复数形式。

比如模型名字为User,默认的,数据表名字为Users。这个默认行为可以通过配置改变。

模型定义

在Sequelize中,Models可以通过以下两种等价方式定义:

1.直接调用sequelize.define(modelName,  attributes, options)方法。

2.继承Model并且调用init(attributes,options)方法。

Model定义后,可以通过sequelize.models.modelName访问该模型。

sequelize.define内部也是通过调用Model.init方法实现的。

Model同步

1.可以通过调用model.sync(options)同步模型和数据库表,这个方法只能同步一个模型

User.sync():如果数据库表不存在,则创建数据库表,如果存在,则不做任何操作

User.sync({ force: true }):如果数据库表已经存在,则先删除数据库表,然后重新创建数据表

User.sync({ alter: true }): 这个会比较数据库表当前状态(比如数据库表的列及数据类型等)与模型的不同之处,然后修改数据库表不同的地方以匹配模型。

2.可以通过调用sequelize.sync()一次同步所有模型。

删除表

1.可以通过调用User.drop()删除与User模型关联的数据表,这种方式只能删除一个表

2.可以通过调用sequelize.drop()一次删除所有的数据库表。

数据库安全检查

数据库的同步sync及删除drop操作都是具有破坏性的。为了安全起见,Sequelize接受一个match选项

sequelize.sync({ force: true, match: /_test$/  })。这样只有当数据库名称以_test结尾时才会执行sync操作

时间戳Timestamps

Sequelize默认给每个model添加createdAt和updatedAt这两个字段,数据类型均为DataTypes.DATE。Sequelize自动管理这些字段。增加或更新一条记录时,Sequelize会自动将当前时间戳赋值给createdAt和updatedAt。这些都是通过Sequelize完成的,并不是SQL出发的。如果直接通过sql语句查询或更新记录,这些字段并不会自动更新。

Models定义为Class的优势

Sequelize Models是ES6的classes。因此可以很容易地往里面添加方法。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章