目前支持的数据库有:,MongoDBPostgreSQLSQLite

    可以在项目目录下通过命令 thinkjs model [name] 来创建模型:

    执行完成后,会创建文件 src/common/model/user.js

    默认情况下模型文件会创建在 common 模块下,如果想创建在其他的模块下,创建时需要指定模块名:

    1. thinkjs model home/user

    :模型文件不是必须存在,如果没有自定义方法可以不创建模型文件,实例化时会取模型基类的实例。

    model.pk

    model.schema

    数据表字段定义,默认会从数据库种读取,读到的信息类似如下:

    可以在模型添加额外的属性,如:默认值和是否只读,如:

    1. export default class extends think.model.base {
    2. /**
    3. * 数据表字段定义
    4. schema = {
    5. view_nums: { //阅读数
    6. default: 0 //默认为 0
    7. },
    8. fullname: { //全名
    9. default: function() { //first_name 和 last_name 的组合,这里不能用 Arrows Function
    10. return this.first_name + this.last_name;
    11. }
    12. }
    13. create_time: { //创建时间
    14. default: () => { //获取当前时间
    15. return moment().format('YYYY-MM-DD HH:mm:ss')
    16. },
    17. readonly: true //只读,添加后不可修改
    18. }

    default 默认只在添加数据时有效。如果希望在更新数据时也有效,需要添加属性 update: true,该属性在 2.1.4 版本中开始支持。

    readonly 只在更新时有效。

    :如果设置了 readonly,那么会忽略 update 属性。


    模型实例化在不同的地方使用的方式有所差别,如果当前类含有 model 方法,那可以直接通过该方法实例化,如:

    否则可以通过调用 think.model 方法获取实例化,如:

    1. let getModelInstance = function(){
    2. let model = think.model('user', think.config('db'), 'home');
    3. }

    使用 think.model 获取模型的实例化时,需要带上模型的配置。

    模型中提供了很多链式调用的方法(类似 jQuery 里的链式调用),通过链式调用方法可以方便的进行数据操作。链式调用是通过返回 来实现的。

    模型中支持链式调用的方法有:

    • where, 用于查询或者更新条件的定义
    • table, 用于定义要操作的数据表名称
    • alias, 用于给当前数据表定义别名
    • data, 用于新增或者更新数据之前的数据对象赋值
    • field, 用于定义要查询的字段,也支持字段排除
    • order, 用于对结果进行排序
    • limit, 用于限制查询结果数据
    • page, 用于查询分页,生成 sql 语句时会自动转换为 limit
    • group, 用于对查询的 group 支持
    • having, 用于对查询的 having 支持
    • join, 用于对查询的 join 支持
    • union, 用于对查询的 union 支持
    • cache 用于查询缓存
      链式调用方法具体使用方式请见 。