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