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

2024-01-04 16:24:49 +08:00
kiddyu  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 !

3637 次点击
所在节点   分享创造  分享创造
19 条回复
SayHelloHi
SayHelloHi
2024-01-04 16:49:18 +08:00
很棒

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

写 query 一路 ctrl + space 下去就行了
kiddyu
2024-01-05 00:19:50 +08:00
@SayHelloHi 谢谢,因为用法一样,文档直接 copy 的 Laravel :D
kiddyu
2024-01-05 00:23:37 +08:00
@0x723b kysely 很好,在查询构建器里,以后应该会取代 knex 了,后边看看能不能用它把 Sutando 里的 knex 换掉
kiddyu
2024-01-05 00:25:36 +08:00
@XCFOX 自己在用的时候写了 Declaretions ,只是还不全,后边会补上
kiddyu
2024-01-05 00:27:48 +08:00
@colliedog 大部分时候还是香的,就是之前在用 prisma 的时候,有几个地方因为功能不支持,需要自己手写 SQL ,就是因为这个才写了 Sutando
kiddyu
2024-01-05 00:29:47 +08:00
@Leviathann 楼上提到的 kysely 也是 type safe ,也是这种 api ,这个没什么吧
fds
2024-01-05 14:09:04 +08:00
哇,厉害,行动力真强。
yafoo
2024-01-05 17:36:33 +08:00
我觉得 thinkphp3.2 的 orm 挺好的,复刻了一部分到我的项目 jj.js
treblex
2024-01-06 12:33:03 +08:00
@Leviathann django 那个可好玩了 age__gt 这样子传
zbowen66
2024-01-07 02:03:36 +08:00
支持 edge runtime 吗? prisma 的官方代理一言难尽...
kiddyu
2024-01-08 14:25:30 +08:00
@zbowen66 next.js 的 edge runtime 吗?我试了下还不支持,knex 用到了一些不支持的包
kiddyu
2024-01-08 14:43:44 +08:00
@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