typeorm 查询_4.typeorm 多对一查询

本文介绍了使用TypeORM在Node.js中处理多对一和一对多关系的实体配置及查询方法。通过Article和User实体类的示例,展示了如何建立和查询这种关系。在查询时,通过ArticleService获取文章及其关联的用户信息,返回结果包含完整的JSON对象,同时展示了生成的SQL查询语句,说明了TypeORM如何以Article为主表进行联查并处理结果。
摘要由CSDN通过智能技术生成

多对一查询

一对多反过来就是多对一,所以多对一的实体类配置和一对多的实体类配置是相同的,只是他们的差异存在于调用的查询的 **Respository ** 是那个类型的 Respository,一家查询的时候配置的 relations 是那个关联对象的属性

User 实体类

import { Column, Entity, JoinColumn, JoinTable, OneToMany, PrimaryColumn } from "typeorm";

import { Article } from "./article.entity";

@Entity('user')

export class User{

@PrimaryColumn()

id: string;

@Column()

nickname: string;

@Column()

username: string;

@Column()

password: string;

@Column()

avator: string;

@Column()

email: string;

@OneToMany((type) => Article, (article) => article.user)

articles: Article[];

}

复制代码

Article 实体类

import { Column, Entity, JoinColumn, ManyToOne, PrimaryColumn } from "typeorm";

import { User } from "./user.entity";

@Entity('article')

export class Article {

@PrimaryColumn()

id: string;

@Column()

title: string;

@Column()

link: string;

@Column()

fileId: string;

@Column('text')

content: string;

@Column()

categoryId: string;

@Column()

formatId: number;

@Column()

originId: number;

@Column()

createBy: string;

@ManyToOne((type) => User, (user) => user.articles)

@JoinColumn({ name: 'createBy' })

user: User;

}

复制代码

Article 服务

import { Injectable } from "@nestjs/common";

import { InjectRepository } from "@nestjs/typeorm";

import { Article } from "src/entities/article.entity";

import { User } from "src/entities/user.entity";

import { Repository } from "typeorm";

@Injectable()

export class ArticleService{

@InjectRepository(Article)

private readonly articleRespository: Repository;

// 多对一查询

getUserOfarticle () {

return this.articleRespository.find({

relations: ['user']

})

}

}

复制代码

查询结果

[

{

"id": "0fcb8310-9c4a-11ea-9427-017d0539b705",

"title": "fe'f",

"link": null,

"fileId": null,

"content": "

微任务

",

"categoryId": "4b958080-9a33-11ea-9abc-1d8c64f552b3",

"formatId": 2,

"originId": 1,

"createBy": "16ffe4f0-98d0-11ea-adcb-cd4aa44d4464",

"user": {

"id": "16ffe4f0-98d0-11ea-adcb-cd4aa44d4464",

"nickname": "李云龙",

"username": "wanghailong",

"password": "1bbd886460827015e5d605ed44252251",

"avator": "http://192.168.1.101:8765/avator/f360e610-9d80-11ea-9008-019523360f5b.jpg",

"email": "5r236g33@test.com"

}

}

]

复制代码

生成的SQL语句分析

SELECT

`Article`.`id` AS `Article_id`,

`Article`.`title` AS `Article_title`,

`Article`.`link` AS `Article_link`,

`Article`.`fileId` AS `Article_fileId`,

`Article`.`content` AS `Article_content`,

`Article`.`categoryId` AS `Article_categoryId`,

`Article`.`formatId` AS `Article_formatId`,

`Article`.`originId` AS `Article_originId`,

`Article`.`createBy` AS `Article_createBy`,

`Article__user`.`id` AS `Article__user_id`,

`Article__user`.`nickname` AS `Article__user_nickname`,

`Article__user`.`username` AS `Article__user_username`,

`Article__user`.`password` AS `Article__user_password`,

`Article__user`.`avator` AS `Article__user_avator`,

`Article__user`.`email` AS `Article__user_email`

FROM

`article` `Article`

LEFT JOIN `user` `Article__user` ON `Article__user`.`id` = `Article`.`createBy`

复制代码

通过上面的 sql 语句可以看出,typeorm 查询的时候是以 Article 表为主表,关联 User 表进行查询,对着返回结果 typeorm 再进行分类处理,最终形成我们看到的 json 对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值