对象关系映射ORM

模型类对应实体表

例如:user.js对应数据库中的thinkuser表(默认的表前缀为think,可通过配置文件修改)

fields属性对应表字段

例如 user 中的fields属性为:

  1. this.fields = {
  2. title: {
  3. type: 'string',
  4. index: true,
  5. size: 100,
  6. defaults: ''
  7. }
  8. }

表示think_user表中包含一个名为title的字段,字段类型为string(根据数据库数据类型定义的差异,在不同的数据库中表示不同的字段类型,例如在mysql中代表varchar,在mongo中代表string),index值为true表示需要索引,size代表字段的长度为100, defaults表示字段默认值

CURD 链式操作

例如:

  1. //useModel为实例化后的模型
  2. useModel.where({name: 'aa'}).find(); //查询think_user表name值为aa的数据

一对一、一对多、多对多关联查询

例如user.js类中申明的关联关系:

  1. // 关联关系
  2. this.relation = {
  3. Profile: {
  4. type: 'hasone', //关联方式
  5. model: Profile, //子表模型
  6. //field: ['test', 'id'],//关联表字段
  7. fkey: 'profile', //主表外键 (子表主键)
  8. rkey: 'id' //子表主键
  9. },
  10. Pet: {
  11. type: 'hasmany',
  12. model: Pet, //子表模型
  13. //field: ['types','user', 'id'],
  14. fkey: '', //hasmany关联此值没用
  15. rkey: 'user'//子表外键 (主表主键)
  16. },
  17. Group: {
  18. type: 'manytomany',
  19. model: Group, //子表模型
  20. //field: ['name', 'type', 'id'],
  21. fkey: 'userid', //map外键(主表主键)
  22. rkey: 'groupid', //map外键(子表主键)
  23. map: UserGroup//map模型
  24. }
  25. };

上述定义表示:

主表think_user同think_profile是一对一的关系

主表think_user同think_pet是一对多的关系

主表think_user同think_group是多地多关联关系