【问题标题】:sequelize create records with foreign keysequelize 使用外键创建记录
【发布时间】:2020-06-21 05:39:51
【问题描述】:

假设条件是用户有很多项目

var User = sequelize.define('user', {
  id: { type: Sequelize.INTEGER, primaryKey: true},
  name: Sequelize.STRING,
}, {
  underscored: true,
  constraints: false
})

var Project = sequelize.define('project', {
  id: { type: Sequelize.INTEGER, primaryKey: true},
  title: Sequelize.STRING,
}, {
  underscored: true,
  constraints: false
})

Project.belongsTo(User)
User.hasMany(Project)

如果我已经在数据库中有用户记录

{ id: 1, name: "spondbob" }

如何使用该用户创建项目?我在某处看到我们可以在创建项目时这样做

{
  id: 1,
  title: "Project 1",
  user_id: 1
}

但是除了直接提及外键之外,还有其他优雅的方式来设置用户吗?

我也知道我可以创建项目并执行project.setUser(user),但问题是user_id 外键设置为NOT NULL。在这种情况下,我必须在创建项目时添加user_id,而不是在创建后设置它。

补充一点,如果我需要创建多个项目并将其分配给一个用户,我该如何实现一个?

【问题讨论】:

  • 您将无法一步创建新的Project 并链接到现有关联。您必须执行 Project.create(obj) 并在回调中运行 projectInstance.setUser(user)
  • @mcranston18 如果我执行Project.create(obj) 而不提及外键user_id,我的数据库引擎将抛出一个错误,因为外键设置为NOT NULL。我不认为删除 NOT NULL 约束是一个好主意,只是以后才能做projectInstance.setUser(user)
  • 您找到解决方案了吗?

标签: sequelize.js


【解决方案1】:
{
  id: 1,
  title: "Project 1",
  user_id: 1
}

如果您将外键名称指定如下,则上面的代码才有效:

Project.belongsTo(User, {foreignKey: 'user_id'})

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-06-27
    • 1970-01-01
    • 2021-12-21
    • 2018-01-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多