首页 > 解决方案 > 指定应该只插入列而不是更新插入

问题描述

我有一些我想通过insertGraph ala插入的数据,ModelName .query(trx) .insertGraph(data) 问题是我有一个守卫,allowInsert它指定应该填充哪些列。我有一列包含另一个表的外键。我不希望填充此列。我不断得到trying to upsert an unallowed relation。我不知道如何指定foreignId不应填充的内容。allowInsert我的代码与警卫看起来像这样

ModelName
       .query(trx)
       .allowInsert([subrelation2.[columnToPopulate1, columnToPopulate2]])
       .insertGraph(data)

Ps 我试过foreignIdallowInsert条件中指定无济于事。指定relation2.*允许插入。但我想保留健全性检查

标签: node.jsobjection.js

解决方案


似乎您正在指定relation2模型的列,而不是子关系。是columnToPopulate1模型的子关系relation2吗?按名称看起来像模型的列,这是错误的。

我认为您想使用关系在“relation2”模型中插入两列。就像是:

let data = {
  modelNameColumn: 'value',
  relation2: {
    columnToPopulate1: 'value',
    columnToPopulate2: 'value',
  }
}

await ModelName
   .query(trx)
   .allowInsert('[relation2]')
   .insertGraph(data)

allowInsert方法中,您只能指定允许插入哪些关系,但不能定义哪些列。

如果要删除要更新的列的可能性,可以使用beforeUpdate()触发器:

class Model2 extends Model {
  async $beforeUpdate(opt, queryContext) {
    await super.$beforeUpdate(opt, queryContext);
    if (this.columnName) throw new Error('columnName shouldnt be updated')
  }
}

推荐阅读