node.js - 指定应该只插入列而不是更新插入
问题描述
我有一些我想通过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 我试过foreignId
在allowInsert
条件中指定无济于事。指定relation2.*
允许插入。但我想保留健全性检查
解决方案
似乎您正在指定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')
}
}
推荐阅读
- ode - MAPLE:使用狄拉克作为输入函数解决 RLC 电路的 ODE 的问题
- algorithm - 分而治之三叉树搜索
- c# - 在项目字段中获取更高价值的对象
- lucene - 如何在 Azure 认知搜索中进行分页
- applescript - AppleScript:将不同列的多个单元格添加到Numbers中的一个选择范围
- selenium - selenium.common.exceptions.WebDriverException:消息:chrome 无法访问(会话信息:chrome=88.0.4324.150)
- google-cloud-platform - 如何在 GCP 的操作日志中公开完整的信息?
- javascript - BootstrapVue 表中的自定义列
- java - 拒绝删除的 Java 文件权限
- python - 在列表中查找下一个最接近的数字