项目开发中,经常要操作数据库,如:增删改查等操作。模型就是为了方便操作数据库进行的封装,一个模型对应数据库中的一个数据表。
目前支持的数据库有:Mysql
,MongoDB
和 SQLite
。
可以在项目目录下通过命令 thinkjs model [name]
来创建模型:
thinkjs model user;
执行完成后,会创建文件 src/common/model/user.js
。
默认情况下模型文件会创建在 common
模块下,如果想创建在其他的模块下,创建时需要指定模块名:
thinkjs model home/user
注
:模型文件不是必须存在,如果没有自定义方法可以不创建模型文件,实例化时会取模型基类的实例。
模型实例化在不同的地方使用的方式有所差别,如果当前类含有 model
方法,那可以直接通过该方法实例化,如:
export default class extends think.controller.base {
indexAction(){
let model = this.model('user');
}
}
否则可以通过调用 think.model
方法获取实例化,如:
let getModelInstance = function(){
let model = think.model('user', think.config('db'), 'home');
}
使用 think.model
获取模型的实例化时,需要带上模型的配置。
模型中提供了很多链式调用的方法(类似 jQuery 里的链式调用),通过链式调用方法可以方便的进行数据操作。链式调用是通过返回 this
来实现的。
export default class extends think.model.base {
/**
* 获取列表数据
*/
async getList(){
let data = await this.field('title, content').where({
id: ['>', 100]
}).order('id DESC').select();
...
}
}
模型中支持链式调用的方法有:
where
, 用于查询或者更新条件的定义table
, 用于定义要操作的数据表名称alias
, 用于给当前数据表定义别名data
, 用于新增或者更新数据之前的数据对象赋值field
, 用于定义要查询的字段,也支持字段排除order
, 用于对结果进行排序limit
, 用于限制查询结果数据page
, 用于查询分页,生成 sql 语句时会自动转换为 limitgroup
, 用于对查询的 group 支持having
, 用于对查询的 having 支持join
, 用于对查询的 join 支持union
, 用于对查询的 union 支持distinct
, 用于对查询的 distinct 支持cache
用于查询缓存