【问题标题】:How do I translate this SQL query to Typeorm如何将此 SQL 查询转换为 Typeorm
【发布时间】:2021-07-29 16:24:50
【问题描述】:

我有这个在查询工具中测试过的查询,现在我希望将它应用到 Typeorm 语法中

SELECT menu_entry.*, "user_menu".is_bookmark FROM menu_entry
LEFT JOIN "user_menu"  ON user_menu.menu_id = menu_entry.id
LEFT JOIN "user"  ON "user".id = user_menu.user_id
WHERE "user".id = 1

我尝试过这种方法,但不是 100% 正确:


async findUserBookmarks(request): Promise<any>{
    const user: any = await createQueryBuilder(User, 'user')
    .leftJoinAndSelect('menu_id', 'menu_entry')
    .leftJoinAndSelect('user.id', 'roles')
    .where('user.id = :id', {id:1 })
    .getMany()

    return console.log('user: ', user);
  }

【问题讨论】:

  • 你为什么使用左连接?原始查询使用的是内连接。
  • 你有哪些实体?你也可以提供吗?
  • @ErangaHeshan 用户实体,MenuEntry 实体,是用户和菜单之间的 N:N。

标签: sql nestjs typeorm


【解决方案1】:

假设你为实体menu_entry定义的类是MenuEntry,typeorm查询语句如下-

async findUserBookmarks(request): Promise<any>{
    return await getRepository(MenuEntry).
    .createQueryBuilder("menuEntry")
    .leftJoinAndSelect("user_menu","userMenu","userMenu.menu_id = menuEntry.id")
    .leftJoinAndSelect("user","user","user.id = userMenu.user_id")
    .where("user.id = 1" )
    .getMany()
}

【讨论】:

    猜你喜欢
    • 2020-12-13
    • 1970-01-01
    • 2023-01-20
    • 2021-05-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-23
    相关资源
    最近更新 更多