用户登录

打开数据库客户端,刷新一下应用界面,现在应用的数据仓库里会出现一个 file 数据表,里面只有一个 id 字段。回到项目,打开 FileEntity 这个实体,在里面可以添加几个字段,再描述一下这个实体跟内容还有用户实体之间的关系。

先添加一个 originalname ,它的值是文件的原名,类型是 string ,属性用 @Column 装饰一下,表示这是一个数据表里的字段。 下面再添加一个 mimetype,文件类型,类型是 stirng,上面用 @Column 装饰一下。

然后添加一个 filename 文件名,类型是 string,用 @Column 装饰一下。 下面再添加一个 size ,表示文件的大小,类型是 number ,上面用 @Column 装饰一下。

再添加一个 postId,相关内容的 id,类型是 number,用 @Column 装饰一下, 然后再添加一个 userId,相关用户的 id,类型是 number,再用 @Column 装饰一下这个属性。

再添加一个 width 属性,图像的宽度,类型是 number,上面用 @Column 装饰一下,这个字段可以配置成可为空值的字段,把 nullable 设置成 true,然后再添加一个 height 字段,类型是 number ,这个字段也可以为空。

下面再添加一个 metadata 字段,类型可以设置成 any, 上面用 @Column 装饰一下,把 nullable 设置成 true,再用 type 把这个字段的类型设置成 json。

在数据库客户端观察一下 file 这个数据表的结构,你会发现这里会多出一些字段,比如 originalname,mimetype,filename 这些字段。最后这个 metadata 字段的类型是 json ,它里面可以存储 JSON 类型的数据。

关系

回到 FileEntity ,在这个实体里再描述一下它跟用户还有内容之间的关系,添加一个 user 关系,类型是 UserEntity,在上面用 @MantyToOne 这个装饰器,定义一个多对一的关系,这个关系相关的类型是 UserEntity,在 user 那边,这个关系是 user 里的 files ,等会儿我们会在用户实体里定义这个关系。再提供一个选项参数,把 onDelete 设置成 CASCADE 。

下面再定义一个内容关系,名字是 post,类型是 PostEntity,在上面用 @ManyToOne 定义一个多对一的关系,返回的类型是 PostEntity,在内容实体那边,对应的关系是 post 里的 files。

然后打开 UserEntity 这个实体,在里面添加一个新的关系,相关的实体类型是 FileEntity,在文件实体那边,对应的关系是 file 里的 user。 关系的名字是 files,相关的类型是 Array,项目类型是 FileEntity。

下面再打开 PostEntity 这个实体,在这个实体里定义一个新的关系,名字叫 files,类型是 Array ,上面用 @OneToMany 装饰一下,表示一对多的关系,相关的实体类型是 FileEntity,在文件实体那里对应的关系是 file 里的 post 。

再回到数据库客户端,刷新一下应用界面,现在 postId 还有 userId 会是一个外键,postId 相关的是 post 表里的 id,打开这个外键观察一下,你会发现它的 onDelete 已经被设置成了 CASCADE 。再打开下面这个 userId 外键,它的 onDelete 也被设置成了 CASCADE。这样删除用户数据的同时,会把跟用户相关的文件一起删除掉。

定义文件实体(FileEntity)《 Nest.js 企业级后端实践:文件上传 》

统计

15260
分钟
0
你学会了
0%
完成

社会化网络

关于

微信订阅号

扫描微信二维码关注宁皓网,每天进步一点