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 的哪个属性就行了