ค้นหาเว็บไซต์

javascript - Typeorm: วิธีการค้นหาตามความสัมพันธ์


ฉันสามารถสอบถามตามความสัมพันธ์โดยใช้รูปแบบ Active Record ได้อย่างไร?

ฉันมีเอนทิตี 2 ตัวและต้องการดึงตัวแรกโดยการสอบถามตัวที่สอง:

บทบาท :

import { User } from "./User";

@Entity({ name: "roles" })
export class Role extends BaseEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column()
  public name: string;

  @CreateDateColumn()
  public createdAt: string;

  @UpdateDateColumn()
  public updatedAt: string;

  @OneToMany(() => User, user => user.role)
  public users: User[];
}

ผู้ใช้ :

@Entity({ name: "users" })
export class User extends BaseEntity {
  @PrimaryGeneratedColumn()
  public id: number;

  @Column()
  public email: string;

  @Column()
  public name?: string;

  @Column({ select: false })
  public passwordSalt: string;

  @Column({ select: false })
  public passwordHash: string;

  @CreateDateColumn()
  public createdAt: string;

  @UpdateDateColumn()
  public updatedAt: string;

  @Column()
  public roleId: number;

  @ManyToOne(() => Role, role => role.users, {
    eager: true
  })
  @JoinColumn()
  public role: Role;
}

ฉันต้องการสอบถามผู้ใช้ตาม Role.name และจัดอันดับตาม Role.createdAt ฉันเขียนฟังก์ชัน buildQuery ที่สร้างคำสั่งสอบถามสำหรับโมเดลผู้ใช้และส่งคำสั่งสอบถามไปยัง findAndCount

สร้างคำสั่งค้นหา :

export default function buildQuery ({
  name,
  email,
  roleName,
  orderByRoleCreatedAt,
  limit,
  offset
}: IUsersQuery) {
  const query = {};

  if (name) {
    set(query, "where.name", Like(`${name}%`));
  }

  // how find users by user.role.name ???
  if (roleName) {
    set(query, "where.role.name", Like(`${roleName}%`));
  }

 // how order users by user.role.createdAt ASC ???
  if (orderByRoleCreatedAt) {
    set(query, "order.role.createdAt", orderByRoleCreatedAt);
  }

  if (email) {
    set(query, "where.email", Like(`${email}%`));
  }

  set(query, "skip", offset);
  set(query, "take", limit);

  return query;
}

User.findAndCount(buildQuery(params));