我有两个模型,视频和帧。
Frame.belongsTo(models.Video);
Video.hasMany(models.Frame, { as: "Frames" });
我现在需要一种方法来指定视频的第一帧和最后一帧,但无法使其发挥作用。
我试过了:
Video.hasOne(Frame, { as: "FirstFrame" });
Video.hasOne(Frame, { as: "LastFrame" });
但是在Frames表中创建了FirstFrameId和LastFrameId而不是Videos表。我需要有video.get / setFirstFrame()和video.get / setLastFrame()函数。我怎么能这样做?
答案 0 :(得分:4)
您不需要在首先显示时设置belongsTo和hasMany。根据您的数据库架构仅使用一个。
要获取视频模型上的FirstFrameId和LastFrameId,您需要使用:
Video.belongsTo(Frame, {as: 'FirstFrame'});
Video.belongsTo(Frame, {as: 'LastFrame'});
这是在Sequelize文档中指定的,您可以查看它here
"尽管它被称为HasOne关联,但对于大多数1:1关系 你通常想要BelongsTo协会,因为BelongsTo会添加 hasOne将在目标上添加的源上的foreignKey。"