用户登录

下面在项目里创建一个内容实体,在终端,项目所在目录的下面,执行 npm run gt 生成一个实体,名字是 post,放在 post/entities 这个目录里面。

回到项目,先配置一下,打开 PostModule 模块,在 imports 里面,用一个 TypeOrmModule.forfeature,一个数组,里面添加一个 PostEntity 。在其它模块里面可能也会用到这个实体,所以在 PostModule 这个模块里面,再添加一个 exports ,重新导出这个 TypeOrmModule。

在数据库客户端观察一下应用的数据仓库,你会发现这里会多出一个 post 数据表,里面现在有一个 id 字段。

定义实体

回到项目,打开 PostEntity ,定义一下这个实体,在内容实体里面,再添加一个字段,用 @Column 装饰一下,名字是 title,类型是 string,再定义一个字段,使用 @Column 装饰器,名字是 content,类型是 string,这个字段的类型可以再设置一下,提供一个选项参数,把 type 设置成 longtext 这种类型,再把 nullable 设置成 true,允许这个字段的值为空。

下面再添加一个字段,使用 @Column 装饰器,名字是 userId,类型是 number,再添加一个字段,使用 @Column 装饰器,名字是 status,表示内容的发布状态,类型可以设置成 PostStatus ,它可以是一个 enum。

直接我们在上面定义一下这个 enum,导出一个 enum 名字是 PostStatus,里面添加几个项目,一个 draft 等于字符串 draft,再添加一个 published,等于 published,还有一个 archived 等于 archived 。

PostEntity 里的 status 这个字段需要再设置一下它的类型,给 @Column 提供一个选项参数,type 设置成 enum,再用 enum 指定一个 enum 名字就是 PostStatus。

实体关系

这个 PostEntity 跟用户实体之间有个多对一的关系,在实体里面要描述一下这个关系,名字是 user,类型是 UserEntity 。

用一个 @ManyToOne 装饰一下 ,第一个函数参数返回的就是 UserEntity 这个实体,然后描述一下在用户那边的这个关系,返回的是 user.posts 。

打开 UserEntity ,在这个实体里面再描述一下他跟内容实体之间的关系,关系的名字是 posts,类型是 Array,上面用 @OneToMany 装饰一下,第一个函数参数返回的是 PostEntity,在 Post 实体那里对应的这个关系就是 post 里的 user。

测试

在数据库客户端观察一下 post 这个数据表的结构,你会发现它里面有 id,title,content,userId 还有 status 这些字段。

这个 userId 是个外键,打开它再观察一下,现在这个 On Delete 是 No Action 。回到项目,打开 PostEntity,找到 user 这个关系,这里用一个选项参数,把 onDelete 设置成 CASCADE, 这样删除用户数据的时候,同时会把相关的内容数据全部一块儿删除掉。

回到数据库客户端,再观察一下 userId 这个外键,现在这里这个 On Delete 会是 CASCADE 。

定义内容实体(PostEntity)《 Nest.js 企业级后端实践:内容管理 》

统计

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

社会化网络

关于

微信订阅号

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