Leoric 是一个 Node.js 的关系对象映射库(ORM),使用 Leoric 操作数据库的方式大致如下:
const { Bone, connect } = require('leoric')
// 基于 Bone 定义模型,映射关系表
class Post extends Bone {
static initialize() {
this.belongsTo('author', { Model: 'User' })
this.hasMany('comments')
}
}
async function() {
// 连接模型到数据库,获取对应表结构信息
await connect({ host: 'example.com', models: [Post], /* among other options */ })
// CRUD
await Post.create({ title: 'New Post' })
const post = await Post.findOne({ title: 'New Post' })
post.title = 'Untitled'
await post.save()
// 也可以批量更新
await Post.update({ title: 'Untitled' }, { title: 'New Post' })
// 获取模型中定义的关联数据
await Post.include('comments').where('posts.title = ?', 'New Post')
// => Post { id: 1, title: 'New Post', ...,
// comments: [ Comment { id, content }, ... ] }
}
Leoric 支持在 Koa、Express、Egg 等 Node.js 社区常见的 Web 开发框架中使用,特别推荐 Egg 开发者使用 egg-orm 插件:
/* config/plugin.js */
exports.orm = {
enable: true,
package: 'egg-orm',
};
/* config/config.default.js */
exports.orm = {
client: 'mysql',
database: 'temp',
host: 'localhost',
};
通过 ctx.model
使用 app/model
下定义的数据模型,例如 ctx.model.User
:
// app/controller/home.js
const { Controller } = require('egg');
module.exports = class HomeController extends Controller {
async index() {
const users = await ctx.model.User.find({
corpId: ctx.model.Corp.findOne({ name: 'alipay' }),
});
ctx.body = users;
}
};
JavaScript | SQL |
---|---|
推荐依次阅读如下文档了解有关 Leoric 的详细信息
有许多种参与贡献的方式,比如:
如果有兴趣贡献代码修复已知问题,参考我们的如何贡献代码一文,大致包含如下内容:
使用 Egg 框架 的开发者,不妨通过 egg-orm 插件来使用 Leoric,可以参考 egg-orm 仓库中已经包含的示例项目。
使用 Midway 的开发者也可以选择我们为 Midway 专门开发的连接组件 @midwayjs/leoric,可以参考文档快速上手,也可以浏览 仓库目录 了解更多使用示例。