使用sequelize创建记录时如何在包含选项中使用范围

时间:2019-05-29 21:32:37

标签: sequelize.js

我们正试图通过利用include选项来续集来在Postgresql数据库中创建一条记录。但是,关联(注释)之一具有范围,而父(帖子)具有与具有该范围的子(注释)的关联。看来sequelize应该根据所提供的范围将值添加到某个字段,但是并没有这样做,相反,该字段保持空白。

我们正在使用sequelize,postgres,javascript,Express Router。

我们尝试添加注释关联(将其命名为“ as”属性),但这只会引发错误“地址使用别名与平民相关联。您必须使用” as”关键字来指定您的include语句中的别名。”

我们已经在将数据发送到sequelize模型之前对其进行了修改,这似乎可行,但似乎很hacky,我们更希望通过sequelize完成此操作,因为这似乎是其中的一部分功能。

我们还可以手动将数据行添加到另一张表中,避免重复执行序列化操作,但是会遇到相同的问题,即它很容易破解。

createPage文件-包含用于创建页面的选项

const includeOptions = [{
  model: models.post,
  as: "specialPosts",
  auditUser: request.nickname,
  include: [{
    model: models.comment,
    // as: "postComments",
    auditUser: request.nickname
  }]
}];

/***** Modification of Data Mentioned Before Sending to Sequelize *****/
pageAttributes.posts[0].comment.commentableType = 'post';

/***** Create Page *****/
const createdPage = await models.pages.create(pageAttributes, queryOptions);

评论模型-commentableType字段

commentableType: {
  type: DataTypes.ENUM([
    COMMENTABLE_TYPE.POST,
    COMMENTABLE_TYPE.IMAGE
  ]),
  field: "commentable_type"
}

帖子模型-评论关联

Post.hasOne(models.comments, {
  // as: "postComments",
  foreignKey: {
    name: "commentableId",
    field: "commentable_id"
  },
  scope: {
    commentable_type: COMMENTABLE_TYPE.POST
  }
});

我们希望通过在主帖子中添加嵌套注释include,sequelize将知道将正确的枚举填充到commentable_type字段中。

0 个答案:

没有答案