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?

Relaterade artiklar