nestjs 全栈进阶--typeorm 一对一

1. 介绍

在 TypeORM 中,一对一(One-to-One)关系是一种数据库关系,其中一个表中的每一行只与另一个表中的一行相关联。比如用户和身份证

2. 准备

我们还是将就上节课的项目,不过我们需要把数据库删除了

右键,选择删除

再把之前的代码清除下

然后我们在新建一个实体

现在我们有了两个实体,但是他们之间还没有任何关系,对吧?所以我们还需要给他们建立关系,如图,我们可以通过@JoinColumn和@OneToOne装饰器来指定

我们执行pnpm start

3. crud

3.1. 增

pnpm start

可以看到后面插入 idCard 的时候,已经有 userId 了

可以看到的是,我们上面的保存是不是分别保存的user和idcard,那他们既然都关联了,那我们是不是可以让他自动按照关联关系来保存,当然可以,我们可以在 @OneToOne 那里指定 cascade 为 true

pnpm start

可以看到,他还是先插入user,在生成idcard

3.2. 改

很简单我们在save的时候带上id,就行了

如果我们只有idcard带了id

他就会新增一个user,修改我们的idcard

3.3. 查

我们来试试我们的find查询

可以看到他只查出了我们的idcard但是没关联出user,如果我们想一起查出来,我们可以声明下 relations 关联查询

还可以写成

3.4. 删

删idcard

删user, 我们来试试删id为2 的user,因为这个是与我们的idcard还有关联关系的对吧,我们设置了外键的 onDelete 是 cascade,我们看看会有什么效果

首先,我们可以看到user表 id为2的已经被删除了

然后我们可以看到idcard中有关联的也删除了

3.5. 通过user查idcard

我们是不是很有可能查用户,并查出他的身份证,这时候我们就需要在user实体中,也建立一个关联关系

这里我们不需要@JoinColumn这个装饰器,因为在idcard中有个外键关联了,所以这里我们只需要通过@OneToOne装饰器 第二个参数告诉 typeorm,外键是另一个 Entity 的哪个属性就行了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值