javascript - Typeorm: hvordan spørre etter relasjon
Hvordan kan jeg gjøre spørring etter relasjon ved bruk av Active Record-mønsteret?
Jeg har 2 enheter og vil hente den første ved å forespørre den andre:
Rolle :
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[];
}
Bruker :
@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;
}
Jeg vil hente bruker basert på Role.name og sortere etter Role.createdAt, jeg skriver en buildQuery-funksjon som bygger spørring for brukermodellen og sender spørringen til findAndCount
byggSpørring :
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));