续集一对一的关系
Posted
技术标签:
【中文标题】续集一对一的关系【英文标题】:Sequelize one to one relation 【发布时间】:2017-09-30 12:02:35 【问题描述】:我有两个模型,视频和帧。
Frame.belongsTo(models.Video);
Video.hasMany(models.Frame, as: "Frames" );
我现在需要一种方法来指定视频的第一帧和最后一帧,但无法正常工作。
我试过了:
Video.hasOne(Frame, as: "FirstFrame" );
Video.hasOne(Frame, as: "LastFrame" );
但这会在 Frames 表而不是 Videos 表中创建 FirstFrameId 和 LastFrameId。我需要有 video.get/setFirstFrame() 和 video.get/setLastFrame() 函数可用。我该怎么做?
【问题讨论】:
【参考方案1】:您不需要像一开始那样设置belongTo 和hasMany。根据您的数据库架构仅使用一个。
要获取视频模型上的 FirstFrameId 和 LastFrameId,您需要使用:
Video.belongsTo(Frame, as: 'FirstFrame');
Video.belongsTo(Frame, as: 'LastFrame');
这是在 Sequelize 文档中指定的,您可以查看它here
“尽管它被称为 HasOne 关联,但对于大多数 1:1 关系 您通常需要 BelongsTo 关联,因为 BelongsTo 会添加 hasOne 将添加到目标的源上的 foreignKey。"
【讨论】:
以上是关于续集一对一的关系的主要内容,如果未能解决你的问题,请参考以下文章