Skip to content

链式方法

IBest-ORM 的链式方法特性可让编码更加流畅自然。

ts
orm.query(User).where({ name: 'jinzhu' }).where({ age: 18 }).first();

方法分类

IBest-ORM 将方法分为三大类:链式方法、终结方法和查询构建器。

链式方法

链式方法允许您逐步构建 SQL 查询,每次调用都会修改或扩展当前的查询语句而不立即执行。通过链式调用,您可以直观地组合多个条件和操作:

  • where() - 设置筛选条件
  • orWhere() - 设置 OR 条件
  • select() - 指定返回字段
  • orderBy() - 设置排序
  • limit() - 限制结果数量
  • offset() - 设置结果偏移量
  • with() - 预加载关联
ts
const users = orm.query(User)
  .where({ status: 'active' })
  .where({ age: { gte: 18 } })
  .select(['id', 'name', 'email'])
  .orderBy('createdAt', 'desc')
  .limit(10)
  .offset(0)
  .find();

终结方法

终结方法会立即执行查询并返回结果:

  • find() - 查询多条记录
  • first() - 查询单条记录
  • count() - 统计数量
  • delete() - 删除记录
  • update() - 更新记录
  • restore() - 恢复软删除记录
ts
// 查询多条
const users = orm.query(User).where({ age: { gte: 18 } }).find();

// 查询单条
const user = orm.query(User).where({ id: 1 }).first();

// 统计数量
const count = orm.query(User).where({ status: 'active' }).count();

// 删除
orm.query(User).where({ status: 'inactive' }).delete();

// 更新
orm.query(User).where({ id: 1 }).update({ name: '新名字' });

查询构建器

通过 orm.query()orm.table() 创建查询构建器:

ts
// 基于实体类查询
const users = orm.query(User).find();

// 基于表名查询
const results = orm.table('users').where({ age: 18 }).find();

条件查询示例

基础条件

ts
// 等于
orm.query(User).where({ name: '张三' }).find();

// 多条件 AND
orm.query(User).where({ name: '张三', age: 18 }).find();

// 链式 AND
orm.query(User).where({ name: '张三' }).where({ age: 18 }).find();

比较操作符

ts
// 大于
orm.query(User).where({ age: { gt: 18 } }).find();

// 大于等于
orm.query(User).where({ age: { gte: 18 } }).find();

// 小于
orm.query(User).where({ age: { lt: 60 } }).find();

// 小于等于
orm.query(User).where({ age: { lte: 60 } }).find();

// 不等于
orm.query(User).where({ status: { ne: 'deleted' } }).find();

// 范围
orm.query(User).where({ age: { gte: 18, lte: 60 } }).find();

OR 条件

ts
orm.query(User)
  .where({ status: 'active' })
  .orWhere({ vipLevel: { gt: 3 } })
  .find();

LIKE 查询

ts
// 包含
orm.query(User).where({ name: { like: '%张%' } }).find();

// 以...开头
orm.query(User).where({ name: { like: '张%' } }).find();

// 以...结尾
orm.query(User).where({ name: { like: '%三' } }).find();

IN 查询

ts
orm.query(User).where({ id: { in: [1, 2, 3] } }).find();

排序和分页

ts
// 排序
orm.query(User).orderBy('createdAt', 'desc').find();

// 多字段排序
orm.query(User)
  .orderBy('status', 'asc')
  .orderBy('createdAt', 'desc')
  .find();

// 分页
orm.query(User)
  .orderBy('id', 'asc')
  .limit(10)
  .offset(20)
  .find();

预加载关联

ts
// 预加载单个关联
orm.query(User).with('profile').find();

// 预加载多个关联
orm.query(User)
  .with('profile')
  .with('orders')
  .find();