粗略的了解下TypeORM的联表查询

image.png

联表查询

联表查询,也称为多表查询,是关系型数据库中用于从两个或多个表中检索数据的一种查询方式。

举个例子,当我们要记录登录日志的时候,我们会记录用户的id以及用户的登录时间在日志表中。

当我们要查看登陆日志的时候,我们无法直接将用户的id显示在页面中,而是需要显示用户的姓名。此时我们就可以使用联表查询获得用户的信息。无须写多个sql去查询。

主从表

主从表,从表数据依赖于主表,一般最后查询数据时把主表与从表进行关联查询。

当两种表进行关联的时候,表A 存在主键,且作为表的唯一性标识。此时我们就将这个表称之为主表。

在表B 中,存在一个外键,且该外键为以表A的主键,我们便可以通过外键与主表进行关联查询。表B就被我们称之为从表。

image.png

TypeORM的联表查询

在TypeORM中,联表查询有多种方式,最常用的方式是在实体类中定义@OneToMany和@ManyToOne两个装饰器来绑定关系。

以下是来自官方文档上的解释:

多对一/一对多是指 A 包含多个 B 实例的关系,但 B 只包含一个 A 实例。让我们以User 和 Photo 实体为例。User
可以拥有多张 photos,但每张 photo 仅由一位 user 拥有。
官网中定义了一个user实体类,存放了用户的信息,以及一个Photo的实体类,用于存放用户的图片。

import { Entity, PrimaryGeneratedColumn, Column, OneToMany } from "typeorm";
import { Photo } from "./Photo";
​
​
@Entity()
export class User {
  @PrimaryGeneratedColumn()
  id: number;
​
​
  @Column()
  name: string;
​
​
  @OneToMany(() => Photo, photo => photo.user)
  photos: Photo[];
}
import { Entity, PrimaryGeneratedColumn, Column, ManyToOne } from "typeorm";
import { User } from "./User";
​
​
@Entity()
export class Photo {
  @PrimaryGeneratedColumn()
  id: number;
​
​
  @Column()
  url: string;
​
​
  @ManyToOne(() => User, user => user.photos)
  user: User;
}

其中生成的表结构如下

image.png

这里我们将@OneToMany添加到photos属性中,并将目标关系类型指定为Photo。你可以在@ManyToOne / @OneToMany关系中省略@JoinColumn,除非你需要自定义关联列在数据库中的名称。

@ManyToOne可以单独使用,但@OneToMany必须搭配@ManyToOne使用。如果你想使用@OneToMany,则需要@ManyToOne。在你设置@ManyToOne的地方,相关实体将有"关联 id"和外键。

至此,一个简单的链表查询就完成了,当我们查询user表的时候,就可以查询出photo的信息。

在这里插入图片描述
公众号文章,求关注

求关注~希望能帮到你

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值