@yunflyjs/yunfly-plugin-prisma
v0.0.1
Published
yunfly prisma plugin.
Downloads
1
Readme
@yunke/yunfly-plugin-prisma
- 新一代 orm 工具
安装
- 安装依赖
yarn add @yunke/yunfly-plugin-prisma
- 申明插件
// `src/config/config.plugin.ts` 中申明插件
const plugins: {[key:string]: string}[] = [
{
name: 'prisma',
package: '@yunke/yunfly-plugin-prisma'
}
];
export default plugins;
- 启用插件
// `src/config/config.default.ts` 中启用插件。
config.prisma = {
enable: true,
db: {
url: 'mysql://user:password@localhost:3306/mydb'
}
};
备注: 确保数据库能连接上且 mydb 数据库已经创建。
config.prisma
配置: 详细说明
- 初始化 prisma
npx prisma init --url 'mysql://user:password@localhost:3306/mydb'
备注:这个命令创建了一个名为
prisma
的新目录,其中包含一个名为schema.prisma
的文件和一个位于项目根目录中的.env
文件schema.prisma
包含prisma
模式以及数据库连接和prisma
客户端生成器。
- 统一初始化配置
npx prisma init --dev
备注:
prisma-init 指令说明 参考地址。 这个命令会更新
.env
和schema.prisma
文件, 保持配置的一致性。支持apollo
管理配置。
- 创建第一个 module
schema.prisma 文件中创建第一个 User module
// This is your Prisma schema file,
// learn more about it in the docs: https://pris.ly/d/prisma-schema
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
}
// User module
model User {
id Int @id @default(autoincrement())
email String @unique
name String?
}
- 生成
Prisma Client
类型文件
- 生成
npx prisma generate
- 重要提示:
- 第一次初始化时,
schema.prisma
中需要有models
配置。- 每次对
Prisma schema
进行更改后,你都需要重新运行命令prisma generate
去更新生成的Prisma Client
代码。
- module 同步到数据库表中
npx prisma migrate dev --name=init
使用
在 Service
中使用 prisma
进行数据的增删改查
import { prisma, Prisma } from '@yunke/yunfly-plugin-prisma';
@Service()
export default class UserService {
async createUser () {
const data: Prisma.UserCreateArgs = {
name: 'Alice',
email: '[email protected]',
}
const newUser = await prisma.user.create({
data,
});
return newUser;
}
async getUserList () {
const users = await prisma.user.findMany();
return users;
}
}
提示:
prisma
包含所有自定义modules
的Typescript
类型提示, 若VS CODE
中没有类型提示时,可直接打开一次node_modules/.prisma/index.d.ts
文件即可
config.prisma 配置说明
| 字段 | 类型 | 必填 | 说明 | | ---- | ---- | ---- | ---- | | enable | boolean | 是 | 是否开启插件 | | db | DbConfig | ((apolloConfig: ApolloConfig) => DbConfig) | 否 | 数据库配置 | | client | Object | 否 | prisma client 客户端配置项 |
db 配置说明
// interface 类型
interface PrismaConfig {
db?: DbConfig | ((apolloConfig: ApolloConfig) => DbConfig);
...
}
interface DbConfig {
url: string;
databaseUrlKey?: string;
}
- url: 连接数据库
url
地址,详细请参考:https://prisma.yoga/concepts/database-connectors/mysql#%E8%BF%9E%E6%8E%A5-url - databaseUrlKey: 数据库环境变量名称,默认值为:
DATABASE_URL
使用 Apollo
config.prisma
支持 apollo
配置:
- 案例一
// 案例
config.prisma = {
enable: true,
db: `${apolloConfig['PRISMA-PROVIDER']}://${apolloConfig['PRISMA-USER']}:${apolloConfig['PRISMA-PASSWORD']}@${apolloConfig['PRISMA-HOST']}:${apolloConfig['PRISMA-PORT']}/${apolloConfig['PRISMA-DATABASE']}`
}
- 案例二
为了提供更灵活的配置,db
参数支持函数模式,自己定制化函数内部逻辑。
config.prisma = {
enable: true,
db: (apolloConfig: ApolloConfig) => {
return {
url: `${apolloConfig['PRISMA-PROVIDER']}://` +
`${apolloConfig['PRISMA-USER']}:` +
`${apolloConfig['PRISMA-PASSWORD']}@` +
`${apolloConfig['PRISMA-HOST']}:` +
`${apolloConfig['PRISMA-PORT']}/` +
`${apolloConfig['PRISMA-DATABASE']}`
}
}
}
config.client 配置说明
- interface 类型说明
interface PrismaConfig {
......
client?: {
datasources?: Datasources;
log?: Array<LogLevel | LogDefinition>;
errorFormat?: ErrorFormat;
rejectOnNotFound?: RejectOnNotFound | RejectPerOperation;
}
}
| 字段 | 类型 | 说明 | | ---- | ---- | ---- | | datasources | Datasources | 数据源 参考地址 | | log| Array<LogLevel | LogDefinition> | 确定日志类型和级别 参考地址 | | errorFormat | ErrorFormat | 确定 Prisma 返回的错误级别和格式 参考地址 | | rejectOnNotFound| RejectOnNotFound | RejectPerOperation | 抛错说明 参考地址 |
prisma-init 命令行参数
prisma-init
命令行支持:--dev
, --prod
, --debug
三个指令
// 设置环境变量 NODE_ENV = dev,适合于开发环境
npx prisma-init --dev
// 设置环境变量 NODE_ENV =production
npx prisma-init --prod
// 设置环境变量 DEBUG = prisma-plugin 显示调试信息
npx prisma-init --dev --debug
Prisma cli 命令行参数说明
prisma init
初始化 prisma
, 用于项目的第一次初始化操作, 它只需要执行一次, 它会在项目中创建一个 .env
prisma/schema.prisma
的案例文件。当项目中已存在相关文件时,它会提示文件已存在。
// 默认初始化
npx prisma init
// 指定数据库初始化
npx prisma init --datasource-provider mysql
// 指定url进行初始化。 备注:它会检测数据库是否能链接成功
npx prisma init --url 'mysql://user:password@localhost:3306/mydb'
prisma generate
初始化 prisma 客户端代码, 它的核心能力是生成 Typescript
类型, 初始化 prisma 服务。 会在 node_modules/.prisma
下自动生成所有 modules
的类型文件, 方便开发人员开发, 提升开发效率。
// 默认初始化客户端代码,当modules有变动时需要重新执行此命令
npx prisma generate
// watch 模式生成客户端代码,当 prisma/schema.prisma 文件有改动时,会自动生成客户端代码
npx prisma generate --watch
prisma studio
图形化管理数据库数据,可以增删改查,不推荐使用,功能不够强大,推荐本地数据库管理工具,例如:Navicat
npx prisma studio
prisma migrate
从Prisma
模型创建迁移,将其应用于数据库, 它会同步 schema.prisma
中定义的 model
到数据库。
// 同步 model 到数据库,会创建 migrations 用于储存同步记录
npx prisma migrate dev
// 为当前迁移命名
npx prisma migrate dev --name=init
// 根据本地 migrations 文件下迁移记录充值 数据库
prisma migrate reset
// 为生产环境做数据同步
prisma migrate deploy
备注:
- 可以增加
--name=init
参数为当前迁移命名 - 当
model
没有变化时,不会生成新的迁移 - 当删除本地
migrations
中迁移记录时,运行reset
命令会删除数据库相关系信息,请慎重执行。
prisma db pull
从现有数据库中提取模式,更新Prisma模型
// 通过数据库表生成 schema.prisma 模型
npx prisma db pull
// 只在控制台打印生成的 schema.prisma
npx prisma db pull --print
// 强制覆盖本地定义的 model
npx prisma db pull --force
prisma db push
将Prisma模型状态推送到数据库
// 直接同步本地 model 到数据库中 (慎重操作:没有迁移记录,推荐使用 prisma migrate)
npx prisma db push
- 命令行万能发 --help
npx prisma --help
npx prisma generate --help
npx prisma db pull --help
prisma 指令:参考文档