Versão do TypeORM: 0.3.21
Notei que, ao especificar relações aninhadas na cláusula where findOptions do TypeORM, ele gera automaticamente os JOINs necessários. Gostaria de confirmar se isso é um recurso intencional ou um efeito colateral não documentado.
Pesquisei na documentação e nos problemas, mas não consegui encontrar uma descrição clara desse comportamento específico. Sou novo no TypeORM, então peço desculpas se isso já estiver documentado em algum lugar que eu não tenha mencionado. Qualquer informação de alguém familiarizado com o funcionamento interno do TypeORM será muito apreciada.
Exemplo de código:
const user = await manager.findOne(User, {
where: {
department: {
company: {
name: 'test',
},
},
},
})
SQL gerado:
SELECT DISTINCT
`distinctAlias`.`User_id` AS `ids_User_id`
FROM
(
SELECT
/* only User table columns */
FROM
`user` `User`
LEFT JOIN `department` `User__User_department` ON `User__User_department`.`department_id` = `User`.`department_id`
AND (
`User__User_department`.`deleted_at` IS NULL
)
LEFT JOIN `company` `c5f78c10915c4173cfd9951235c1b6b329194b87` ON `c5f78c10915c4173cfd9951235c1b6b329194b87`.`company_id` = `User__User_department`.`company_id`
AND (
`c5f78c10915c4173cfd9951235c1b6b329194b87`.`deleted_at` IS NULL
)
WHERE
(
(
(
(
(
(
(
`c5f78c10915c4173cfd9951235c1b6b329194b87`.`name` = 'test'
)
)
)
)
)
)
)
AND (`User`.`deleted_at` IS NULL)
) `distinctAlias`
ORDER BY
`User_id` ASC
LIMIT
1
Como mostrado acima, mesmo sem especificar explicitamente as relações, os JOINs são gerados automaticamente apenas usando objetos aninhados na cláusula where.