Puede que se de el caso de que encuentres alguna incompatibilidad en tu código o trabajo, recuerda probar siempre en un ambiente de testing antes aplicar el código al trabajo final.
find
/findOne
no permite filtrar por propiedades de relaciones anidadas. Ir por QueryBuilder
en cambio con algo como
const x = await repo.createQueryBuilder("foo")
.innerJoinAndSelect("foo.parent", "parent")
.where("parent.name = :name", name )
.getOne()
Marque aquí para una pregunta similar.
Existe una solución para el filtrado basado en campos de relación para findOne()
/find()
métodos que he descubierto recientemente. El problema con el filtrado de campos de tabla relacionados solo existe para ObjectLiteral
-estilo where
tiempo string las condiciones funcionan perfectamente.
Supongamos que tenemos dos entidades: User
y Role
el usuario pertenece a un rol, el rol tiene muchos usuarios:
@Entity()
export class User
name: string;
@ManyToOne(() => Role, role => role.users)
role: Role;
@Entity()
export class Role
@OneToMany(() => User, user => user.role)
users: User[];
Ahora podemos llamar findOne()
/find()
métodos de EntityManager
o repositorio:
roleRepository.find(
join: alias: 'roles', innerJoin: users: 'roles.users' ,
where: qb =>
qb.where( // Filter Role fields
a: 1,
b: 2
).andWhere('users.name = :userName', userName: 'John Doe' ); // Filter related field
);
Puede omitir el join
parte si has marcado tu relación como ansiosa.
Comentarios y calificaciones
Si guardas algún recelo o forma de reformar nuestro noticia puedes ejecutar una crítica y con mucho gusto lo analizaremos.