【问题标题】:More efficient way to associate newly created child with existing parent? (hasMany)将新创建的孩子与现有父母相关联的更有效方法? (有很多)
【发布时间】:2019-06-05 09:15:20
【问题描述】:

我有两个模型 - ChannelMessageChannelMessage 有一个 hasMany 关联;消息与Channel 有一个belongsTo 关联。

ChannelModel.hasMany(MessageModel);
MessageModel.belongsTo(ChannelModel);

目前,我正在创建一个新的Message(子),然后使用getMessages() 获取现有频道的(父)Messages,然后在更新之前将新的Message 添加到接收的数组中ChannelsetMessages() 的孩子。

如果我可以只使用 addMessages(),这可能会更有效,但是 Sequelize 文档指出 hasMany 关联创建 getset 方法,但没有提到 add 方法,例如 @987654340 @有。

在创建新子代时,有没有办法自动将其与现有父代关联?也许在传递给MessageModel.create() 的对象中有includes 属性? Sequelize 文档似乎只有从头开始创建所有内容的示例(展示了如何通过父模型(不是现有模型)创建新的父模型,同时在同一语句中嵌套多个新子模型)。

【问题讨论】:

    标签: sequelize.js


    【解决方案1】:

    根据您定义的关联,您的消息对象必须将 channel_id 作为列...该字段是强制性的,因此您必须传递它才能成功创建消息记录?您为此设置了解析器和突变?

    【讨论】:

    • 嗯,为了参照完整性,外键可以完全为空,也可以是父级中的有效主键。创建一个Message,其中channelId 为空,然后在通过get/set 的各种解决方法之后立即分配一个有效的FK 并没有引发任何错误。我还没有听说过解析器或突变,但我将在创建每个 Message 时传递一个 channelId 属性,这应该可以工作。
    • 是的,听起来应该可以解决问题...好吧,您没有使用 graphql,我误以为您是...
    • 它有效,所以,将其标记为答案。希望这是正确的程序。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2021-12-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多