TypeORM:按关系列查找记录

在 TypeORM 中,您可以使用如下查询构建器根据关系列(在相关表中)选择表中的行:

const postRepository = myDataSource.getRepository(Post);

const posts = await postRepository
      .createQueryBuilder('post')
      .innerJoinAndSelect('post.user', 'user')
      .where('user.age > :age', { age: 45 })
      .getMany();

console.log(posts);

上面的代码片段检索年龄大于 45 岁的任何用户创建的所有帖子。

为了更清楚,您可以在下面看到User实体和Post实体。

用户实体:

// KindaCode.com
// User entity
import {
  Entity,
  PrimaryGeneratedColumn,
  Column,
  OneToMany,
  Unique,
} from 'typeorm';
import { Post } from './Post.entity';

@Entity({ name: 'users' })
@Unique(['email'])
export class User {
  @PrimaryGeneratedColumn()
  id: number;

  @Column()
  name: string;

  @Column()
  email: string;

  @Column({ nullable: true })
  age: number;

  @OneToMany((type) => Post, (post) => post.user)
  posts: Post[];
}

发布实体:

// KindaCode.com Example
// Post entity
import { Entity, Column, PrimaryGeneratedColumn, ManyToOne } from 'typeorm';
import { User } from './User.entity';

@Entity({name: 'posts'})
export class Post {
  @PrimaryGeneratedColumn()
  id: number;

  @ManyToOne((type) => User, (user) => user.posts, { cascade: true })
  user: User;

  @Column()
  title: string;

  @Column()
  body: string;
}