首页 > 解决方案 > Sequelize:按 hassMany 关联字段过滤表

问题描述

我在从 hasMany 关联字段中查找和过滤数据时遇到问题,正在使用以下软件包版本:“sequelize”:“^6.9.0”、“mysql2”:“^2.3.3-rc.0”

这是我的桌子:

const RequestForm = sequelize.define('RequestForm', {
    id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
        allowNull: false,
        noUpdate : true
    },
   type: DataTypes.STRING

})


const RequestStatus = sequelize.define('RequestStatus', {
    id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
        allowNull: false,
        noUpdate : true
    },
})



const Employee = sequelize.define('Employee', {
    id: {
        type: DataTypes.UUID,
        defaultValue: DataTypes.UUIDV4,
        primaryKey: true,
        allowNull: false,
        noUpdate : true
    }})

这是关联:

    RequestStatus.belongsTo(RequestForm);
    RequestForm.hasMany(RequestStatus);

    RequestStatus.belongsTo(Employee);
    Employee.hasMany(RequestStatus);

我正在尝试查找具有以下条件之一的 RequestForm 数据:

  1. RequestForm 类型 = “一个”
  2. RequestForm 类型 = “二”
  3. RequestStatus EmployeeId(FK) 之一等于“123e4567-e89b-12d3-a456-426614174000”

我想返回RequestForm的所有RequestStatus,所以我不能但在哪里包括


这我的代码但不工作并得到错误 - >原始:错误:'where子句'中的未知列'RequestStatus.EmployeeId'

RequestForm.find({
where: {
 [Op.or]: [
        {type: {[Op.in]: ["One", "Two"]}},
        {
                employee_id_value: Sequelize.where(
                    Sequelize.col("RequestStatuses.EmployeeId"),
                    {
                        [Op.eq]: "123e4567-e89b-12d3-a456-426614174000",
                    }
                )
            },
]
},
include:[
        {
            model: RequestStatus,
                attributes: ['id', 'EmployeeId'],
            required: false,
        },
        {Other Models}
]
})

标签: javascriptmysqlnode.jssequelize.js

解决方案


你拼错RequestStatusSequelize.col,不需要指明employee_id_value字段,Sequelize.where直接使用:

where: {
 [Op.or]: [
        {
          type: {
            [Op.in]: ["One", "Two"]
          }
        },
        Sequelize.where(Sequelize.col("RequestStatus.EmployeeId"),
          Op.eq, "123e4567-e89b-12d3-a456-426614174000")
 ]
},

推荐阅读