Sutando: 把最好用的 ORM 复刻到 Node.js

324 天前
 kiddyu

在 v2 很多帖子都可以看到,Laravel 和 Rails 的 ORM 几乎是大家公认最好用的 ORM ,Sutando 就是他们在 Node.js 里的 “复刻版”,如果你之前用过 Laravel ,那你使用 Sutando 几乎没有学习成本,因为它们的使用起来几乎相同 (功能实现了 80%+)。

地址: https://github.com/sutandojs/sutando
文档: https://sutando.org

特性:

安装:

npm install sutando mysql2 --save

建立连接 & 定义模型:

const { sutando, Model } = require('sutando');

// 连接信息
sutando.addConnection({
  client: 'mysql2',
  connection: {
    host : '127.0.0.1',
    port : 3306,
    user : 'root',
    password : '',
    database : 'test'
  },
});

const db = sutando.connection();

// 查询构造器
const users = await db.table('users').where('age', '>', 35).get();

// 模型定义
class User extends Model {}

CRUD:

// 查询
const users = await User.query().where('age', '>', 35).get();

// 新增
const user = new User;
user.name = 'David Bowie';
await user.save();

// 删除
await user.delete();

// 分页
const users = await User.query().paginate(1, 15);

// 关联预加载
const users = await User.query().with('posts').get();

// 关联条件
const users = await User.query().with({
  posts: q => q.where('likes_count', '>', 100)
}).get();

// 关联延迟加载
await user.load('posts');
await users.load('posts');

最后:Welcome Star, PR and Issues !

3401 次点击
所在节点    分享创造
19 条回复
SayHelloHi
324 天前
很棒

文档很完善
luckrnx09
324 天前
厉害了。前不久看到 https://github.com/drizzle-team/drizzle-orm ,感觉楼主写的这个跟它有点像。
0x723b
324 天前
可以看看 kysely ,用起来比 knex 舒服很多
0x723b
324 天前
XCFOX
324 天前
我来给泼个冷水
2024 年了居然还没有 TypeScript Declaretions
你可以不用 TypeScript 但不能没有 Declaretions
colliedog
324 天前
prisma 不香吗?
zhengfan2016
324 天前
@colliedog 要是能把 prisma 复刻到 PHP 那边就好了哈哈,
Leviathann
324 天前
where('age', '>', 35)
幽默,这种 api ,拿头跟别人 full type safe 的 api 比

写 query 一路 ctrl + space 下去就行了
kiddyu
324 天前
@SayHelloHi 谢谢,因为用法一样,文档直接 copy 的 Laravel :D
kiddyu
324 天前
@0x723b kysely 很好,在查询构建器里,以后应该会取代 knex 了,后边看看能不能用它把 Sutando 里的 knex 换掉
kiddyu
324 天前
@XCFOX 自己在用的时候写了 Declaretions ,只是还不全,后边会补上
kiddyu
324 天前
@colliedog 大部分时候还是香的,就是之前在用 prisma 的时候,有几个地方因为功能不支持,需要自己手写 SQL ,就是因为这个才写了 Sutando
kiddyu
324 天前
@Leviathann 楼上提到的 kysely 也是 type safe ,也是这种 api ,这个没什么吧
fds
323 天前
哇,厉害,行动力真强。
yafoo
323 天前
我觉得 thinkphp3.2 的 orm 挺好的,复刻了一部分到我的项目 jj.js
treblex
322 天前
@Leviathann django 那个可好玩了 age__gt 这样子传
zbowen66
322 天前
支持 edge runtime 吗? prisma 的官方代理一言难尽...
kiddyu
320 天前
@zbowen66 next.js 的 edge runtime 吗?我试了下还不支持,knex 用到了一些不支持的包
kiddyu
320 天前
@luckrnx09 drizzle-orm 现在很火啊,只是国内好像很少人提。其实我感觉 drizzle-orm 更像个查询构建器而不是 ORM 。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1005862

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX