请教下mysql的驱动Sequelize的关联表问题,设置过表关系的模型,操作时提示表模型没有关系。
发布于 7 年前 作者 zhang962976642 5472 次浏览 来自 问答

我不管我最帅,我是你们的小可爱Sequelize

问题描述: 我在单独创建sequelize的模型时。使用了Model.associate方法, ps:我的sequelize是4.x.x版本。 然后在编写逻辑的时候使用Model.findAll()时我配置了options的include 对象。 cmd提示如下:

  // SequelizeEagerLoadingError: room is not associated to cabinet!

从早上9:0 – 16:48一直没有解决的掉,详情大佬帮忙提点一下。谢谢~ 1. 报错信息
CMD.png
2. room模型
room模型.png
3. cabinet模型
cabinet模型.png
4. 连接mysql并且sequelize.import模型
mysql.png
5. 同步mysql数据库 sequelize.sync
同步数据库.png
6. 逻辑处理操作
控制器.png


再次本菜鸟谢谢Cnodejs的诸位大佬!
2017/08/07 16:54:32

8 回复

生无可怜,我已经绝望了 orz

@zhangjx 唔,老哥,我这个用的express 没必要再换成egg的了啊

@zhang962976642 看错标题了,以为是 用的 Egg

@zhangjx 没事 - -, 来了还能聊点天,一条恢复没有,那我不更尴尬

RoomCabinet 这个 Model 是不是不存在? through 更适合多对多的映射关系

const User = sequelize.define('user', {})
const Project = sequelize.define('project', {})
const UserProjects = sequelize.define('userProjects', {
    status: DataTypes.STRING
})

User.belongsToMany(Project, { through: UserProjects })
Project.belongsToMany(User, { through: UserProjects })

Cabinet 表 添加 room_id 字段

Room.hasMany(models.Cabinet, {
  foreignKey: 'room_id',
  constraints: false,
});

这样应该可以

@zhangjx 大佬解决了

@zhang962976642 分享分享,怎么解决的?

@zhangjx 这个有点尴尬.

  Model.associate = function(Model){
      Model.hasOne(Model['xxx']);
  };
  /*
   *  这个函数我是声明了,sequelize 4.x版本需要这么声明模型关系,这个函数我声明了 ,没有调用,我在sequelize.import 引入表模型之后,我显示的执    * 行了Model.associate(SequelizeDb);人后通过测试,现在没问题了,讲真这真尴尬,手册上我翻了一天也没看到,可能是我翻译能力太渣了。
  */
回到顶部