续集一对一的关系

时间:2017-05-02 20:35:09

标签: node.js orm associations sequelize.js one-to-one

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

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()函数。我怎么能这样做?

1 个答案:

答案 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。"