【问题标题】:Sequelize : Only returning one of many result for a nested includeSequelize :仅返回嵌套包含的多个结果之一
【发布时间】:2019-05-06 22:03:14
【问题描述】:

我有 3 张桌子:

  1. 职位发布
  2. 招聘阶段
  3. 采访时段

他们的联系是, jobpost有许多招聘阶段和 招聘阶段有很多面试时段

通过包含招聘阶段关联和组子句,我能够获得职位的所有招聘阶段。

const jobPosts = await JobPost.unscoped().findAll({
            where,
            include: [
            {
                model: db.RecruitmentPhase,
                include: [{
                    model: db.InterviewSlot,
                },

            ],
            group: ['RecruitmentPhases.id'],
        });

但我只获得了一个招聘阶段的面试名额,尽管该招聘阶段有许多个面试名额。

我尝试在包含内做组子句。

const jobPosts = await JobPost.unscoped().findAll({
                where,
                include: [
                {
                    model: db.RecruitmentPhase,
                    group: ['InterviewSlots.id'],
                    include: [{
                        model: db.InterviewSlot,
                    },

                ],
                group: ['RecruitmentPhases.id'],
            });

但它也只提供一个采访时间

编辑

职位模型:

module.exports = (sequelize, DataTypes) => {
    const jobPost = sequelize.define('JobPost', {
        id: {
            type: DataTypes.BIGINT,
            allowNull: true,
            autoIncrement: true,
            primaryKey: true,
        },
        jobTitle: {
            type: DataTypes.STRING(150),
            allowNull: true,
        },

    }, {
        timestamps: true,
        defaultScope: {
            attributes: { exclude: ['createdAt', 'updatedAt'] },
        },
    });
    jobPost.associate = (models) => {
        jobPost.hasMany(models.RecruitmentPhase);
    };
    return jobPost;
};

招聘阶段模型:

module.exports = (sequelize, DataTypes) => {
    const recruitmentPhase = sequelize.define('RecruitmentPhase', {
        id: {
            type: DataTypes.BIGINT,
            allowNull: true,
            autoIncrement: true,
            primaryKey: true,
        },

        phaseName: {
            type: DataTypes.STRING(200),
            allowNull: true,
        },

    }, {
        timestamps: true,
    });
    recruitmentPhase.associate = (models) => {
        recruitmentPhase.belongsTo(models.JobPost);
        recruitmentPhase.hasMany(models.InterviewSlot);
    };
    return recruitmentPhase;
};

面试模式:

module.exports = (sequelize, DataTypes) => {
    const interviewSlot = sequelize.define('InterviewSlot', {
        id: {
            type: DataTypes.BIGINT,
            allowNull: true,
            autoIncrement: true,
            primaryKey: true,
        },
        interviewDate: {
            type: DataTypes.DATE,
            allowNull: true,
        },
    });
    interviewSlot.associate = (models) => {
        interviewSlot.belongsTo(models.RecruitmentPhase);
    };
    return interviewSlot;
};

【问题讨论】:

  • 发布您的模型以进一步分析它们

标签: node.js sequelize.js


【解决方案1】:

删除group: ['RecruitmentPhases.id'], 以查看InterviewSlots 的详细信息。照原样,您会看到面试时段的摘要......

【讨论】:

  • 如果我删除 ['RecruitmentPhases.id'] 我不会获得多个招聘阶段。
【解决方案2】:

所以,我不太确定,这是正确的答案,也是正确的方法。 但是当我用这个 '->' 对该嵌套表“interviewslot”进行分组时,它起作用了。

group: ['RecruitmentPhases.id', 'RecruitmentPhases->InterviewSlots.id'],

【讨论】:

  • 您能否将您希望看到的数据显示为查询结果?
【解决方案3】:

如果这是您要从数据库中获取的内容,为什么您似乎获取的是 JobPost 而不是 RecruitmentPhase

据我了解 - 您希望获取所有 RecruitmentPhases 以及他们为每个 RecruitmentPhase 分配的 InterviewSlots 的工作职位。

可能的代码: (更新)

const rec = await db.RecruitmentPhase.findAll({
    include:[{model: db.JobPost, where:{ id:job_id }}, {model: db.InterviewSlot}]
});
res.json(rec)
//Expected JSON Data
{
  "RecruitmentPhase":[
    {
      "id":1,
      "phaseName":"Phase 1",
      "JobPosts": {
        "id":1,
        "jobTitle":"XYZ"
      },
      "InterviewSlots":[
        {//inteview slot #1 data},
        {//interview slot #2 data}
      ]
    },
    {
      "id":2,
      "phaseName":"Phase 2",
      "JobPosts": {
        "id":1,
        "jobTitle":"XYZ"
      },
      "InterviewSlots":[
        {//inteview slot #1 data},
        {//interview slot #2 data}
      ]
    }
  ]
}

【讨论】:

  • 我有职位 ID。我需要从那里获得该职位的所有招聘阶段。对于每个招聘阶段,我需要获得所有招聘阶段
  • 投反对票?您只需在查询中添加一个where 子句。更新了答案。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2020-06-17
  • 2017-08-27
  • 2021-02-09
  • 2021-05-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多