赞
踩
联表查询,也称为多表查询,是关系型数据库中用于从两个或多个表中检索数据的一种查询方式。
举个例子,当我们要记录登录日志的时候,我们会记录用户的id以及用户的登录时间在日志表中。
当我们要查看登陆日志的时候,我们无法直接将用户的id显示在页面中,而是需要显示用户的姓名。此时我们就可以使用联表查询获得用户的信息。无须写多个sql去查询。
主从表,从表数据依赖于主表,一般最后查询数据时把主表与从表进行关联查询。
当两种表进行关联的时候,表A 存在主键,且作为表的唯一性标识。此时我们就将这个表称之为主表。
在表B 中,存在一个外键,且该外键为以表A的主键,我们便可以通过外键与主表进行关联查询。表B就被我们称之为从表。
在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; }
其中生成的表结构如下
这里我们将@OneToMany添加到photos属性中,并将目标关系类型指定为Photo。你可以在@ManyToOne / @OneToMany关系中省略@JoinColumn,除非你需要自定义关联列在数据库中的名称。
@ManyToOne可以单独使用,但@OneToMany必须搭配@ManyToOne使用。如果你想使用@OneToMany,则需要@ManyToOne。在你设置@ManyToOne的地方,相关实体将有"关联 id"和外键。
至此,一个简单的链表查询就完成了,当我们查询user表的时候,就可以查询出photo的信息。
求关注~希望能帮到你
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。