node.js - TypeORM 中的内连接查询
问题描述
我有使用 TypeORM 包与 Postgres SQL 交互的 nestjs 应用程序。
我有以下代码,
import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, Index} from 'typeorm';
@Entity()
export class User {
@PrimaryGeneratedColumn()
public id: number;
@Index()
@Column({nullable: true})
public userId: number;
@Index()
@Column()
public appId: string;
@Column({nullable: true})
public keyId: number;
}
import {Entity, PrimaryGeneratedColumn, Column, CreateDateColumn, UpdateDateColumn, Index} from 'typeorm';
@Entity()
export class Key {
@PrimaryGeneratedColumn()
public id: number;
@Index()
@Column()
public userId: number;
@Index()
@Column()
public key: string;
}
import {Injectable} from '@nestjs/common';
import {InjectRepository} from '@nestjs/typeorm';
import {createQueryBuilder, Repository, getRepository, getManager} from 'typeorm';
import {User} from '../user.entity';
import {Key} from './key.entity';
@Injectable()
export class KeyService {
public constructor(
@InjectRepository(Key)
private readonly KeyRepository: Repository<Key>,
@InjectRepository(User)
private readonly userRepository: Repository<User>,
) {}
public async fetch (userId: id): Promise <any> {
const user = await this.userRepository.findOne({where:{userId:id}});
const result = // typeORM query for inner join
return result
}
对于键和用户实体,我需要创建一个内部联接作为
SELECT * FROM key INNER JOIN user ON key.id = user."keyId" WHERE user."userId" = 1;
如何使用 typeORM 编写等效的内连接查询?
如何使用 typeORM 执行上述 SQL 查询?
解决方案
@Injectable()
export class KeyService {
public constructor(
@InjectRepository(Key)
private readonly keyRepository: Repository<Key>
) {}
public fetch(userId: id): Promise<any> {
return this.keyRepository.createQueryBuilder('key')
.innerJoinAndMapOne('key.user', User, 'user', 'key.id = user.keyId')
.where('user.userId = :userId', { userId: 1 }) // or you can change condition to 'key.userId = :userId' because of you have `userId` in Key
.getMany();
}
推荐阅读
- javascript - 如何检测具有类的特定幻灯片是否在视图中?
- node.js - 使用 robomongo 客户端连接到 mongodb 生产环境
- xamarin - 我们可以在 Xamarin 或 Ionic 上使用 ARCORE 制作移动应用程序吗?
- javascript - 如何使用 shelljs 打开 javascript 命令行
- python - Create folders based on filenames
- awk - 使用 grep 查找对应的错误行项
- c# - C# 原子属性只能获取,如何设置值?
- python - Matplotlib 轴图例在 barh 中仅显示一个标签
- python - 在python中找到最小值
- javascript - 试图动态删除/添加隐藏类来操作 DOM