链式方法
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();