繁体   English   中英

续集:“模型 A 与模型 B 无关”

[英]Sequelize: "Model A is not associated to Model B"

我有问题:“与”无关。 我想要一对多的关联。 这是我的代码Index.js

  fs.readdirSync(__dirname)
  .filter(file => {
    return file.indexOf('.') !== 0 && file !== basename && file.slice(-3) === '.js';
  })
  .forEach(file => {
    const model = require(path.join(__dirname, file))(sequelize, Sequelize);
    db[model.name] = model;
  });

Object.keys(db).forEach(modelName => {
  if (db[modelName].associate) {
    db[modelName].associate(db);
  }
});
db.Sequelize = Sequelize;
db.sequelize = sequelize;
module.exports = db;

这是course.js

module.exports = (sequelize, Sequelize) => {
  const Course = sequelize.define(
    'course',
    {
      idCourse: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        field: 'idcourse',
      },
      nameOfCourse: {
        type: Sequelize.STRING,
        field: 'nameofcourse',
      },
      idLevel: {
        type: Sequelize.INTEGER,
        field: 'idlevel',
      },
      idTypeOfCourse: {
        type: Sequelize.INTEGER,
        field: 'idtypeofcourse',
      },
      startDate: {
        type: Sequelize.DATE,
        field: 'startdate',
      },
      endDate: {
        type: Sequelize.DATE,
        field: 'enddate',
      },
      fee: {
        type: Sequelize.BIGINT,
        field: 'fee',
      },
      isDeleted: {
        type: Sequelize.BOOLEAN,
        field: 'isdeleted',
      },
    },
    {
      freezeTableName: true,

      timestamps: false,

      createdAt: false,

      updatedAt: false,
    }
  );
  Course.associate = function (models) {
    models.course.belongsToMany(models.bill, {
      through: models.billinfo,
      as: 'bill',
      foreignKey: 'idCourse',
    });
    models.course.belongsTo(models.typeofcourse, {
      foreignKey: 'idTypeOfCourse',
      sourceKey: 'idCourse',
      as: 'typeofcourse',
    });
  };
  return Course;
};

这是 TypeOfCourse.js

module.exports = (sequelize, Sequelize) => {
  const TypeOfCourse = sequelize.define(
    'typeofcourse',
    {
      idTypeOfCourse: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true,
        field: 'idtypeofcourse',
      },
      nameOfType: {
        type: Sequelize.STRING,
        field: 'nameoftype',
      },
      language: {
        type: Sequelize.STRING,
        field: 'language',
      },
      tags: {
        type: Sequelize.ARRAY(Sequelize.TEXT),
        field: 'tags',
      },
      isDeleted: {
        type: Sequelize.BOOLEAN,
        field: 'isdeleted',
      },
    },
    {
      freezeTableName: true,

      timestamps: false,

      createdAt: false,

      updatedAt: false,
    }
  );
  TypeOfCourse.associate = function (models) {
    models.typeofcourse.hasMany(models.course, {
      foreignKey: 'idTypeOfCourse',
      as: 'course',
    });
  };
  return TypeOfCourse;
};

在 course.controller.js 中,我定义了函数 findAll Course 并希望显示有关 typeOfCourse 的信息

exports.findAll = (req, res) => {
  Course.findAll({
    include: [
      {
        model: TypeOfCourse,
        as: 'typeofcourse',
        through: { attributes: [] },
      },
    ],
  })
    .then(data => {
      res.send(data);
    })
    .catch(err => {
      res.status(500).send({
        message: err.message || 'Some error occurred while retrieving course.',
      });
    });
};

但是当我发送请求获取课程时。 此消息回复:

{
    "message": "typeofcourse is not associated to course!"
}

我错在哪里以及如何解决此错误。 太感谢了。

您可以使用hasMany关联,它将创建一个带有连接表的 N:M 关联

Course.hasMany(TypeOfCourse, {
          foreignKey: { name: 'idCourse' },
          targetKey: 'idCourse',
          constraints: false,
          as: 'typeOfCourses',
        }),
    ```

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM