typescript - Typeorm Hitta villkor för relaterad entitet
Jag har två entiteter, en User-entitet och en Post-entitet. En användare kan ha flera inlägg.
Jag skulle vilja hitta ett inlägg baserat på inläggets titel och författarens namn på det här sättet:
const post = await postsRepository.find({
where: {
title: postTitle,
user: {
name: userName,
},
},
relations: ['user'],
});
Typeorm genererar följande SQL:
SELECT `Post`.`id` AS `Post_id`, `Post`.`title` AS `Post_title`, `Post`.`user_id`
AS `Post_user_id`, `Post__user`.`id` AS `Post__user_id`, `Post__user`.`name` AS
`Post__user_name` FROM `posts` `Post` LEFT JOIN `users` `Post__user` ON
`Post__user`.`id`=`Post`.`user_id` WHERE (`Post`.`user_id` = ?) -- PARAMETERS: [null]
Som du kan se, frågar den inte alls efter namn-attributet.
Men det fungerar inte och jag kan inte hitta något i dokumentationen.
[Redigera]: Å andra sidan fungerar följande kod som förväntat men använder inte joins för att fråga relationen:
const user = await usersRepository.findOne({ name: userName });
const post = await postsRepository.find({
where: {
title: postTitle,
user: {
id: user.id,
},
},
relations: ['user'],
});
[/Redigera]
Det enda jag kunde var något liknande detta
const post = await postsRepository.createQueryBuilder('posts')
.innerJoinAndSelect('posts.user', 'user')
.where({
title: postTitle,
})
.andWhere('user.name = :name', { name: userName })
.getOne();
Så det här fungerar, men ärligt talat ser det superdåligt ut och är ganska irriterande att skriva när man behöver filtrera efter ytterligare relationer.
Finns det något jag har missat i dokumentationen?