当前位置:   article > 正文

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

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[];
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17
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;
}
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6
  • 7
  • 8
  • 9
  • 10
  • 11
  • 12
  • 13
  • 14
  • 15
  • 16
  • 17

其中生成的表结构如下

image.png

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

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

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

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

求关注~希望能帮到你

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家小花儿/article/detail/661361
推荐阅读
相关标签
  

闽ICP备14008679号