一对一关系

Mar*_*inP 2 orm associations one-to-one node.js sequelize.js

我有两个模型,视频和帧。

Frame.belongsTo(models.Video);
Video.hasMany(models.Frame, { as: "Frames" });
Run Code Online (Sandbox Code Playgroud)

现在,我需要一种方法来指定视频的第一帧和最后一帧,但无法正常工作。

我尝试了这个:

Video.hasOne(Frame, { as: "FirstFrame" });
Video.hasOne(Frame, { as: "LastFrame" });
Run Code Online (Sandbox Code Playgroud)

但这会在“帧”表而不是“视频”表中创建FirstFrameId和LastFrameId。我需要具有video.get / setFirstFrame()和video.get / setLastFrame()函数。我怎样才能做到这一点?

Ell*_*key 5

最初显示时,您不需要设置belongeTo和hasMany。根据您的数据库架构,仅使用一个。

要在视频模型上获取FirstFrameId和LastFrameId,您需要使用:

Video.belongsTo(Frame, {as: 'FirstFrame'});
Video.belongsTo(Frame, {as: 'LastFrame'});
Run Code Online (Sandbox Code Playgroud)

这是在Sequelize文档中指定的,您可以在此处进行检查

“即使它被称为HasOne关联,对于大多数1:1关系,您通常也需要BelongsTo关联,因为BelongsTo将在源上添加foreignKey,而hasOne将在目标上添加。”