2020-03-01 10:46
继上篇后新完成大屏演示端、消息订阅、部分 API 分页。
随着功能开发深入细节,仍在 Preview 开发状态,功能未完善的 ORM 工具 Prisma2 问题凸显。我对数据库、ORM 没经验,这些问题在之前的选型中确实未考虑到,用到的 Nexus 框架也还在重度开发中,经常有 breaking changes,导致项目框架变动频繁,不过 Askent 项目一开始是作为我技术实践学习用的,折腾期间已学到很多。
开发中的 Prisma2 关键功能严重缺失,导致产品功能无法实现,如今到了要“弃坑”的时候。缺失关键功能如下:
我的 prismal.schema
中有如下 model 定义:
model User {
id String @default(cuid()) @id
votedQuestions Question[] @relation(name: "VotedUsersUserTable")
}
model Question {
id String @default(cuid()) @id
votedUsers User[] @relation(name: "VotedUsersUserTable")
}
User
和 Question
多对多时会创建关联表,用 @relation(_name: String?, references: Identifier[]?)
定义关联表名,但无法自定义 field 名,只是无意义的 A
和 B
,如下
关系表 VotedUsersUserTable
:
A | B |
---|---|
aId | bId |
不知道 AB 哪个是 userId,哪个是 questionId,虽然比较一下能确定,但这样也太不明确了,也就不好统计 Question.votedUsers
的 Count
。
.count()
queries。这些功能将会在以后逐渐完善,但并没有具体的实践计划,所以为了让 Askent 功能开发继续,暂只能弃坑,准备用成熟的 Sequelize 替换之,参照 ts-apollo-sequelize 项目。
同时数据库准备用 MySQL 替换 SQLite,之前用 SQLite 是起步之初为简化开发环境。
我很喜欢 prisma.schema
定义 model 的方式,屏蔽麻烦的数据库的建表工作,还有自动生成 PrismaClient,极大简化访问数据库操作。看到正在更新的 Nexus 新官网,将要集成数据库访问,或许就是 nexus-prisma
将默认集成到其中,成为从数据库到 GraphQL 的一站式开发框架。很看好 Prisma2 的发展,期待看到它逐渐完善后的样子。