原子查询

2018-11-28 14:56:13

read

前端

this.$api.post('/a/base/atom/read', {
  key: { atomId, itemId },
}).then(item => {
  console.log(item);
});

后端

const user = this.ctx.user.op;
const item = await this.ctx.meta.atom.read({
  key: { atomId, itemId },
  user,
});

select

前端

this.$api.post('/a/base/atom/select', {
  atomClass: {
    id,
    module,
    atomClassName,
  },
  options: { 
    where: {
      ['a.atomName']: { op: 'like', val: 'atomName' }
    },
    orders: [
      [ 'a.updatedAt', 'desc' ],
    ],
    page: { index: 0, size: 10 },
  },
}).then(data => {
  console.log(data.list, data.index, data.finished);
});

返回值

名称 说明
data.list 条目列表
data.index 下一页的分页索引
data.finished 数据是否已经获取完毕。如果获取完毕,就不会再获取下一页

参数

名称 允许为空 说明
atomClass 原子类型
options.where 查询条件
options.orders 排序
options.page.index 分页索引
options.page.size 分页大小

联合查询表清单

原子的select操作实现原理是:根据用户提交的参数组合sql语句,其中会联合一些系统表,从而取得用户所希望的信息

表名称 表别名 说明
aAtom a 原子基础表
aAtomClass b 原子类型表
{item} f 原子业务表

where条件

EggBorn中的where条件类似于EggJS中的where条件,如

where: { atomName: 'test', atomFlag: 1 },

此外,EggBorn中的where条件,还提供了增强指令,便于构建更复杂的条件,如

指令:in
where: { 
  'a.id': { 
    op: 'in', val: [ 1, 2, 3 ],
  },
},
指令:like
where: { 
  'a.atomName': { 
    op: 'like', val: 'test', 
  },
},
指令:likeLeft
where: { 
  'a.atomName': { 
    op: 'likeLeft', val: 'test', 
  }, 
},
指令:likeRight
where: { 
  'a.atomName': { 
    op: 'likeRight', val: 'test', 
  },
},

orders排序

EggBorn中的orders排序用法与EggJS中的orders排序一致,如

orders: [
  [ 'a.updatedAt', 'desc' ],
],

page分页

EggBorn新增了page分页特性,通过indexsize的组合生成sql语句中的limitoffset

一般而言,前端不需传递page.size,而是由后端统一填充此值,可以在项目的config文件中覆盖page.size的默认值,如下:

src/backend/config/config.default.js

// modules
config.modules = {
  'a-base': {
    pageSize: 20,
  },
};

后端

const user = this.ctx.user.op;
const items = await this.ctx.meta.atom.select({
  atomClass,
  options: { 
    where,
    orders,
    page,
  },
  user,
});


评论: