Sequelize多个表的条件不起作用

时间:2017-07-13 05:06:18

标签: javascript mysql node.js express sequelize.js

构建Sequelize查询时无法从具有两个不同where条件的两个表中过滤数据。我在这里添加一些代码......

型号:

//Task model
module.exports = function(sequelize, DataTypes) {
  var Task = sequelize.define("Task", {
    type: DataTypes.STRING(100),
    start : DataTypes.DATE,
    finish : DataTypes.DATE,
    status : DataTypes.STRING(1),
    }, {
    classMethods: {
      associate: function(models) {
        Task.belongsTo(models.User, {
          onDelete: "CASCADE",
          foreignKey: {
            allowNull: true
          }
        });

        Task.hasOne(models.Evaluation);
        Task.hasMany(models.Clarification);
      }
    }
  });
  return Task;
};
//Evaluation model
module.exports = function(sequelize, DataTypes) {
  var Evaluation = sequelize.define("Evaluation", {
    agent_id : DataTypes.INTEGER,
    agent_name: DataTypes.STRING(100),
    status: DataTypes.STRING(100),

    }, {
    classMethods: {
      associate: function(models) {
        Evaluation.belongsTo(models.Task, {
          onDelete: "CASCADE",
          foreignKey: {
            allowNull: false
          }
        });
        Evaluation.hasMany(models.Clarification);
      }
    }
  });
  return Evaluation;
};
//Clarification model
module.exports = function(sequelize, DataTypes) {
  var Clarification = sequelize.define("Clarification", {
    result : DataTypes.TEXT,
    status : DataTypes.STRING(100),
    comment : DataTypes.TEXT
    }, {
    classMethods: {
      associate: function(models) {
        Clarification.belongsTo(models.Task, {
          onDelete: "CASCADE",
          foreignKey: {
            allowNull: false
          }
        });
        Clarification.belongsTo(models.Evaluation, {
          onDelete: "CASCADE",
          foreignKey: {
            allowNull: false
          }
        });
      }
    }
  });
  return Clarification;
};

我刚刚添加了所需的代码并不完全相同。

实际使用:

var filterobj = {
    where: {
            "UserId": { $ne: "NULL" }
        },
    include: [{
        model: models.Evaluation,
        attributes: ["id", "status","agent_name"],
        where: {
            "status": { $ne: "created" }
        },
        include: [{
            model: models.EvalForm,
            attributes: ["id", "name","LobId"],
            include: [{
                model: models.Lob,
                attributes: ["id", "ClientId"]
            },
            {
                model: models.FormDetails,
                attributes: ["version", "status"]
            }
            ]
        }, {
            model: models.Clarification,
            attributes: ["id", "status"]
        }],
        required: true
    },{
        model: models.User,
        attributes: ["name"]
    }]
};
models.Task.findAll(filterobj).then(function (tasklist) {
    // Doing some stuff for specific format
    return res.send(tasklist);
}).catch(function (err) {
    return res.send({ "error": { "code": 5000, "message": err.message } });
});

响应:

[
{
        "id": 760,
        "type": "clarification",
        "start": "2017-07-12T14:30:52.000Z",
        "finish": "2017-07-13T05:41:56.000Z",
        "status": "A",
        "UserId": 854,
        "Evaluation": {
            "id": 760,
            "status": "completed",
            "agent_name": "TestAgent1",
            "EvalForm": {
                "id": 5000008,
                "name": "MobiPostpaid1",
                "LobId": 26,
                "Lob": {
                    "id": 26,
                    "ClientId": 1
                },
                "FormDetails": [
                    {
                        "version": 1,
                        "status": "A"
                    }
                ]
            },
            "Clarifications": [
                {
                    "id": 70,
                    "status": "raised"
                },
                {
                    "id": 71,
                    "status": "esclate"
                }
            ]
        },
        "User": {
            "name": "pooja.s"
        }
    },
    {
        "id": 761,
        "type": "clarification",
        "start": "2017-07-12T14:30:52.000Z",
        "finish": "2017-07-12T14:35:30.000Z",
        "status": "A",
        "UserId": 854,
        "Evaluation": {
            "id": 761,
            "status": "assigned",
            "agent_name": "TestAgent1",
            "EvalForm": {
                "id": 5000008,
                "name": "MobiPostpaid1",
                "LobId": 26,
                "Lob": {
                    "id": 26,
                    "ClientId": 1
                },
                "FormDetails": [
                    {
                        "version": 1,
                        "status": "A"
                    }
                ]
            },
            "Clarifications": []
        },
        "User": {
            "name": "pooja.s"
        }
    }
]

预期代码(不工作)

var filterobj = {
    where: {
            "UserId": { $ne: "NULL" }
        },
    include: [{
        model: models.Evaluation,
        where: {
            "status": { $in: ["assigned","completed"] }
        },
        attributes: ["id", "status","agent_name"],
        include: [{
            model: models.EvalForm,
            attributes: ["id", "name","LobId"],
            include: [{
                model: models.Lob,
                attributes: ["id", "ClientId"]
            },
            {
                model: models.FormDetails,
                attributes: ["version", "status"]
            }
            ]
        }, {
            model: models.Clarification,
            attributes: ["id", "status"]
        }],
        required: true
    },{
        model: models.User,
        attributes: ["name"]
    }, {
        model: models.Clarification,
        where: {
            "status": { $in: ["raised"] }
        }
        attributes: ["id", "status"]
    }]
};

models.Task.findAll(filterobj).then(function (tasklist) {
    // Doing some stuff for specific format
    return res.send(tasklist);
}).catch(function (err) {
    return res.send({ "error": { "code": 5000, "message": err.message } });
});

预期回复:

[
{
        "id": 760,
        "type": "clarification",
        "start": "2017-07-12T14:30:52.000Z",
        "finish": "2017-07-13T05:41:56.000Z",
        "status": "A",
        "UserId": 854,
        "Evaluation": {
            "id": 760,
            "status": "completed",
            "agent_name": "TestAgent1",
            "EvalForm": {
                "id": 5000008,
                "name": "MobiPostpaid1",
                "LobId": 26,
                "Lob": {
                    "id": 26,
                    "ClientId": 1
                },
                "FormDetails": [
                    {
                        "version": 1,
                        "status": "A"
                    }
                ]
            },
            "Clarifications": [
                {
                    "id": 70,
                    "status": "raised"
                },
                {
                    "id": 71,
                    "status": "esclate"
                }
            ]
        },
        "User": {
            "name": "pooja.s"
        },
        "Clarifications": [
            {
                "id": 70,
                "status": "raised"
            }
        ]
    },
    {
        "id": 761,
        "type": "clarification",
        "start": "2017-07-12T14:30:52.000Z",
        "finish": "2017-07-12T14:35:30.000Z",
        "status": "A",
        "UserId": 854,
        "Evaluation": {
            "id": 761,
            "status": "assigned",
            "agent_name": "TestAgent1",
            "EvalForm": {
                "id": 5000008,
                "name": "MobiPostpaid1",
                "LobId": 26,
                "Lob": {
                    "id": 26,
                    "ClientId": 1
                },
                "FormDetails": [
                    {
                        "version": 1,
                        "status": "A"
                    }
                ]
            },
            "Clarifications": []
        },
        "User": {
            "name": "pooja.s"
        },
        "Clarifications": []
    }
]

我可以在任务评估表格中包含澄清表格,我有这种关联。 其中条件的问题。它正在拉动所有记录。我期待来自澄清表的数据,状态为已提升。并从评估表状态分配并完成。我在某些地方使用 OR 运算符看到了代码。

A.findAll({
    where: {
        $or: [
            {'$B.userId$' : 100},
            {'$C.userId$' : 100}
        ]
    },
    include: [{
        model: B,
        required: false

    }, {
        model: C,
        required: false
    }]
}); 

但这不适合我。

0 个答案:

没有答案