【问题标题】:Sequelize Where condition in nested includeSequelize Where 条件嵌套包含
【发布时间】:2021-02-09 06:17:15
【问题描述】:

如何在 Sequelize 中使用 include 生成以下 sql 语句?

select
    *
from
    User_Role_Table as user_role
inner join User_Table as u on
    u.User_ID = user_role.User_ID
inner join Role_Table as r on
    r.User_Role_ID = user_role.User_Role_ID
where
    u.User_ID = u_id AND r.Role_Name = 'role_name'
    

我试过把 where 条件放在 include 里面,但是如果没有找到记录就会报错。

UserRole.findOne({
        where: {
            userId,
        },
        include: [
            {
                model: User,
                as: "users",
                required: true,
            },
            {
                model: Role,
                as: "roles",
                require: true,
                where: {
                    roleName,
                },
            },
        ],
    })

是否可以将包含中的 where 条件放入外部初始 where 块中?我尝试了以下方法,但它返回错误: SequelizeDatabaseError: The multi-part identifier "UserRole.roleName" could not be bound.

UserRole.findOne({
        where: {
            userId,
            "$Role.roleName$": roleName,//roleName condition write here
        },
        include: [
            {
                model: User,
                as: "users",
                required: true,
            },
            {
                model: Role,
                as: "roles",
                require: true,
            },
        ],
    })

【问题讨论】:

    标签: node.js express sequelize.js


    【解决方案1】:

    您可以在每个连接中包含where

    const userRole = await UserRole.findOne({
      include: [
        {
          model: User,
          where: {
            User_ID: userId,
          },
        },
        {
          model: Role,
          where: {
            Role_Name: roleName,
          },
        },
      ],
    });
    

    【讨论】:

      猜你喜欢
      • 2017-08-27
      • 2021-06-05
      • 2019-04-11
      • 2019-11-04
      • 1970-01-01
      • 1970-01-01
      • 2021-05-01
      • 1970-01-01
      • 2017-06-22
      相关资源
      最近更新 更多