续订一对一的关系

我有两个模型,video和帧。

Frame.belongsTo(models.Video); Video.hasMany(models.Frame, { as: "Frames" }); 

我现在需要一种方法来指定一个video的第一帧和最后一帧,但不能得到它的工作。

我试过这个:

 Video.hasOne(Frame, { as: "FirstFrame" }); Video.hasOne(Frame, { as: "LastFrame" }); 

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

首先你不需要设置belongsTo和hasMany。 根据你的数据库模式,只使用一个。

要获得video模型上的FirstFrameId和LastFrameId,您需要使用:

 Video.belongsTo(Frame, {as: 'FirstFrame'}); Video.belongsTo(Frame, {as: 'LastFrame'}); 

这是在Sequelize文档中指定的,你可以在这里查看

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