related issues #805 https://github.com/eggjs/egg-sequelize/pull/9
需要抽象一个 egg-model 层,和现在 egg-view 的实现类似,可以支持多个 model 共存。现在交由插件直接实现 model 的加载还是不太合理:
egg-model 支持指定默认的 model,这样如果用户只引入 sequelize 的话写法也很简单。也可以考虑通过子目录或者是文件后缀的形式来支持引入 mongoose 等其他 model 层。
- model
- user.js
- geographical.mongoose.js
/cc @huacnlee @denghongcai @eggjs/core
通过增加 model 层来约束加载我觉得挺好
Q: model 的用法本身各个 ORM 实现就不同,通过什么样的访问形式来区分不同类型的model?app.model.sequelize.xxx 这样吗?
Q: 如果 ORM 也需要像 egg-mysql 插件那样支持多个数据库,怎么办?
model 的用法本身各个 ORM 实现就不同,通过什么样的访问形式来区分不同类型的model?
还是都通过 app.model.xxx 来访问吧,至于这个 xxx 是什么 model,使用者在声明这个 model 的时候就决定了,例如 xxx.mongoose.js。
如果 ORM 也需要像 egg-mysql 插件那样支持多个数据库,怎么办?
这个没想清楚,但是应该是 sequelize, mongoose 这些插件来实现的。
以前有一个草案了,在那个里面讨论吧
每个插件都判断下返回的类型,比如 mongoose 判断下是否是一个 mongoose.model,sequelize 就判断下是否是 sequelize 的 model。这样对不支持的忽略就好了。
还有既然 @huacnlee 这么支持 sequelize,那就官方推荐用 sequelize 好了。#805 里提到的 mongoose session 可以直接调用 mongoose 的 client,不需要使用 model。
egg-mongoose 那个可以统一下,初始化传递 app 进去好点。
@jtyjty99999 说的是 https://github.com/eggjs/egg/issues/388
几点结论
https://github.com/eggjs/egg/issues/388 这个可以先不讨论了,自己做成本很高。
这个要补充到文档里,应该写到哪比较好。
https://eggjs.org/zh-cn/tutorials/index.html
这里? 或者这里也要顺便改改描述
才看到这个问题……你们已经在讨论了
前段时间我也一直在想这个问题,还和天猪大哥在钉钉简单交流了下,最好做一层统一的model ORM,可以对接各种类型的数据。
我原想是在model里声明一个type,指定数据类型,然后有对应的适配器去做处理(好像和贯高在后缀表名,类似egg-view机制差不多意思)。
一些关键逻辑还在构思……这段时间赶项目,耽误住了……
我认为其实不需要额外实现一层抽象,成本略高(同时我的 JS 高级技巧欠缺,处理不好)
sequelize 已经支持很多种常见的关系型数据库,需求满足的,MongoDB
能同时支持当然更好,没支持我觉得也是可以接受的,在我看来,关系型数据库才是首要需要保障的。
纠正一下,我不是支持 Sequleize 而是支持关系型数据库的方案,只是目前 Node.js
社区可用的看起来这个略好些(其实也有很多不爽的)但以我们实际项目来看,还是能够满足需求的。
typeorm
要是有人能封装这个就好了
真这么做,再包装一下就快成loopback了,被那个坑过,千万别啊
感觉不要把关系数据库和文档数据库混一起,但是可以提供一层让两个插件可以一起使用,比如 sequelize 加载model/sequelize下的model, monggose 加载model/mongoose下的model,通过配置自己能指定加载哪个路径下的model时就可以了。
同求 TypeORM,毕竟现在全面 TypeScript,而且还能更方便的支持 GraphQL + TypeGraphQL
Sequelize 的那套不好用,话说官方的 egg-sequelize 貌似 migration 有 bug
@zhangchen91 欢迎社区直接补全,不一定要等官方的,我们自己在日常业务用不到的组件,写了也维护不好。
sequelize有个不爽的地方就是模型建立关联以后,数据库就自动加了主外键。但是不想数据库有主外键
@acodercat 用 Migration
sequelize有个不爽的地方就是模型建立关联以后,数据库就自动加了主外键。但是不想数据库有主外键
定义的时候 constraints属性设置为false;
Most helpful comment
typeorm
要是有人能封装这个就好了