最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

Sequelize模型与模型无关

IT培训 admin 11浏览 0评论

Sequelize模型与模型无关

我已经花了几个小时没事了。我有太多的资料来源,它们都差不多,但是我无法使我的项目正常工作。

这个问题Sequelize.js - "is not associated to"与我的问题非常相似,但是,我的这个问题不应重复。因为肯定有一个新问题!

要列出我的资料,我已经仔细阅读并尝试过的资料:

  1. Sequelize.js - "is not associated to"
  2. Sequelize 4.3.2 n:m (many-to-many) association: Unhandled rejection SequelizeEagerLoadingError
  3. Link to a book on Google
  4. /@eth3rnit3/sequelize-relationships-ultimate-guide-f26801a75554

为了添加上下文,我正在尝试提供一种允许用户获取其个人资料的路由。每个用户只有一个角色。

例如:

{
  id: 4,
  email: '[email protected]',
  role: {
     id: 2,
     name: 'admin'
  }
}

将findOne与WHERE和INCLUDE一起使用]

exports.getme = (req, res) => {
  db.users.findOne({
    where: { id: req.user.id },
    include: [{
      model: db.roles,
    }]
  })  
  .then(data => {
    res.send(data)
  })
  .catch(err => {
    console.log(err)
    res.status(500).send({
      message: "An error has occured while retrieving data."
    })
  })
}

我得到的错误是:

角色未与用户关联!


这是模型,以及我如何放置它们各自的关联:

Role.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Role = sequelize.define('Role', {
    id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true,
      field: "id"
    },
    role: DataTypes.STRING
  }, {
    timestamps: false
  });
  Role.associate = function (models) {
    Role.hasMany(models.User, {
      foreignKey: "roleId",
      sourceKey: "id"
    })
  }
  return Role;
};

User.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
    email: DataTypes.STRING,
  }, {});
  User.associate = function (models) {
    User.belongsTo(models.Role, { 
      foreignKey: "roleId", 
      targetKey: "id"
    });
  }
  return User
}

而且,当我检查表的relations

时,只能在USER表中看到详细信息,而在ROLES表中则看不到任何详细信息。


编辑:Anatoly从注释部分指出,当db.users启动时,似乎findOne没有关联。这是我在server.js中设置模型的方法:

....
const db = require("./app/models")

if (process.env.NODE_ENV === "production") {
  db.sequelize.sync().then(() => {
    useRoutes()
    seedDB()
  })
} else {
  db.sequelize.sync({ force: true }).then(() => {
    console.log("Drop and re-sync db.")
    useRoutes()
    seedDB()
  })
}

function useRoutes() {
  console.log("Use routes...")
  require("./app/routes/user/user.routes")(app)
  require("./app/routes/emojis/emojis.routes")(app)
  require("./app/routes/auth/auth.routes")(app)

  const db = require("./app/models")
  // Custom.
  db.op = db.Sequelize.Op
  // Models
  db.appsettings = require("./app/models/appsettings/appsettings.model")(db.sequelize, db.Sequelize)
  db.countries = require("./app/models/appsettings/country.model")(db.sequelize, db.Sequelize)

  db.users = require("./app/models/user/user.model")(db.sequelize, db.Sequelize)
  db.roles = require("./app/models/user/role.model")(db.sequelize, db.Sequelize)
  db.userscores = require("./app/models/user/userscore.model")(db.sequelize, db.Sequelize)

  db.answers = require("./app/models/game/answer.model")(db.sequelize, db.Sequelize)
  db.categories = require("./app/models/game/category.model")(db.sequelize, db.Sequelize)
  db.questions = require("./app/models/game/question.model")(db.sequelize, db.Sequelize)
  db.useracoomplishedquestions = require("./app/models/game/useracoomplishedquestion.model")(db.sequelize, db.Sequelize)
}

我已经花了几个小时一无所获。我有很多资料来源,它们都差不多,但是我无法使我的项目正常工作。这个问题Sequelize.js-“不关联”是...

回答如下:

为这样的每个模型调用associate

Sequelize模型与模型无关

我已经花了几个小时没事了。我有太多的资料来源,它们都差不多,但是我无法使我的项目正常工作。

这个问题Sequelize.js - "is not associated to"与我的问题非常相似,但是,我的这个问题不应重复。因为肯定有一个新问题!

要列出我的资料,我已经仔细阅读并尝试过的资料:

  1. Sequelize.js - "is not associated to"
  2. Sequelize 4.3.2 n:m (many-to-many) association: Unhandled rejection SequelizeEagerLoadingError
  3. Link to a book on Google
  4. /@eth3rnit3/sequelize-relationships-ultimate-guide-f26801a75554

为了添加上下文,我正在尝试提供一种允许用户获取其个人资料的路由。每个用户只有一个角色。

例如:

{
  id: 4,
  email: '[email protected]',
  role: {
     id: 2,
     name: 'admin'
  }
}

将findOne与WHERE和INCLUDE一起使用]

exports.getme = (req, res) => {
  db.users.findOne({
    where: { id: req.user.id },
    include: [{
      model: db.roles,
    }]
  })  
  .then(data => {
    res.send(data)
  })
  .catch(err => {
    console.log(err)
    res.status(500).send({
      message: "An error has occured while retrieving data."
    })
  })
}

我得到的错误是:

角色未与用户关联!


这是模型,以及我如何放置它们各自的关联:

Role.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Role = sequelize.define('Role', {
    id: {
      type: DataTypes.INTEGER,
      allowNull: false,
      primaryKey: true,
      autoIncrement: true,
      field: "id"
    },
    role: DataTypes.STRING
  }, {
    timestamps: false
  });
  Role.associate = function (models) {
    Role.hasMany(models.User, {
      foreignKey: "roleId",
      sourceKey: "id"
    })
  }
  return Role;
};

User.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    id: { type: DataTypes.BIGINT, allowNull: false, autoIncrement: true, unique: true, primaryKey: true },
    email: DataTypes.STRING,
  }, {});
  User.associate = function (models) {
    User.belongsTo(models.Role, { 
      foreignKey: "roleId", 
      targetKey: "id"
    });
  }
  return User
}

而且,当我检查表的relations

时,只能在USER表中看到详细信息,而在ROLES表中则看不到任何详细信息。


编辑:Anatoly从注释部分指出,当db.users启动时,似乎findOne没有关联。这是我在server.js中设置模型的方法:

....
const db = require("./app/models")

if (process.env.NODE_ENV === "production") {
  db.sequelize.sync().then(() => {
    useRoutes()
    seedDB()
  })
} else {
  db.sequelize.sync({ force: true }).then(() => {
    console.log("Drop and re-sync db.")
    useRoutes()
    seedDB()
  })
}

function useRoutes() {
  console.log("Use routes...")
  require("./app/routes/user/user.routes")(app)
  require("./app/routes/emojis/emojis.routes")(app)
  require("./app/routes/auth/auth.routes")(app)

  const db = require("./app/models")
  // Custom.
  db.op = db.Sequelize.Op
  // Models
  db.appsettings = require("./app/models/appsettings/appsettings.model")(db.sequelize, db.Sequelize)
  db.countries = require("./app/models/appsettings/country.model")(db.sequelize, db.Sequelize)

  db.users = require("./app/models/user/user.model")(db.sequelize, db.Sequelize)
  db.roles = require("./app/models/user/role.model")(db.sequelize, db.Sequelize)
  db.userscores = require("./app/models/user/userscore.model")(db.sequelize, db.Sequelize)

  db.answers = require("./app/models/game/answer.model")(db.sequelize, db.Sequelize)
  db.categories = require("./app/models/game/category.model")(db.sequelize, db.Sequelize)
  db.questions = require("./app/models/game/question.model")(db.sequelize, db.Sequelize)
  db.useracoomplishedquestions = require("./app/models/game/useracoomplishedquestion.model")(db.sequelize, db.Sequelize)
}

我已经花了几个小时一无所获。我有很多资料来源,它们都差不多,但是我无法使我的项目正常工作。这个问题Sequelize.js-“不关联”是...

回答如下:

为这样的每个模型调用associate

与本文相关的文章

发布评论

评论列表 (0)

  1. 暂无评论