【问题标题】:Sequelize hasOne/hasMany doesn't add FK续集 hasOne/hasMany 不加 FK
【发布时间】:2017-10-20 10:07:48
【问题描述】:

如果我这样做,为什么不添加外键(一切都在生成器函数中):

User.hasOne(Request)
Request.belongsTo(User)

let usr = yield User.create({name: 'John'})
let req = yield Request.create({title: 'smthng'})

req.setUser(usr)
usr.setRequest(req)

之后该请求对用户具有外键,但用户没有。为什么?

更新
我也可以添加属于同一用户的多个请求

【问题讨论】:

    标签: database foreign-keys sequelize.js


    【解决方案1】:

    我之前已经在post 上回答过这个问题。基本上来自 hasOne 和 hasMany 的声明它们在目标模型上创建 FK。如果您认为 FK 在 1:1 关系上停留在原始模型上,则必须使用 belongsTo,甚至 sequelize 文档都建议使用 here

    尽管它被称为 HasOne 关联,但对于大多数 1:1 关系,您通常需要 BelongsTo 关联,因为 BelongsTo 将在源上添加外键,而 hasOne 将在目标上添加。

    对于 1:N 之间的关系,除了 hasMany 之外别无选择,正如我所说,它会在目标模型上创建 FK,因为这就是 1:N 关系的工作原理。

    【讨论】:

    • 那么,模型不能相互绑定吗?我只能通过SELECT id FROM requests WHERE user_id = 1获得用户请求?
    • 在需要FK的模型中使用belongsTo。如果您在请求模型上需要它,请执行以下操作:Request.belongsTo(models.User, { as: 'user_id' });
    猜你喜欢
    • 2021-03-11
    • 1970-01-01
    • 2023-04-07
    • 2018-12-06
    • 2016-03-17
    • 2019-07-05
    • 1970-01-01
    • 2016-12-26
    • 2021-05-28
    相关资源
    最近更新 更多