javascript - 项目以 dB 为单位创建两次
问题描述
解释
它是一个带有许多从数据库(optionsDB)加载的 V-Radio-Button 的表单
options in db: [{ID: 21, Name: "Cellphones"}, {ID: 32, Name: "Computer",}]].
然后加载组件从数据库中加载一些用户可能之前配置过的选项,或者可能不加载任何东西(OrginalOptions)
orginalOptions: [{ID: 1, Inventory_Id: 21, Quantity: 32, Status: 1}, {ID: 2, Inventory_ID: 21, Quantity: 32, Status: 1}]
我所做的是走安排看看用户是否对任何选项进行了更改,首先检查他是否有inventory_id 将数据发送到另一个编辑项目的函数。到目前为止,该程序运行良好。
从这里其他:
} else {
if ((allOptions[indexOpcionesTablas].state ....
然后这是ELSE,它是针对在Web上配置的新项目,因此没有从dB分配的服务并且不在OrginalOptions []中,仅存在于AllOps []中。
AllOps [] 自动配置并根据用户修改的内容创建状态或数量字段(这里都很好)
allOptions item changed: [{ID: 37, Name: "itemx", Quantity: 50}]
我在此步骤中尝试做的是检查更改是变量“数量”和“状态”,以这种方式将数据发送到数据库并创建它们。(这会将项目放在 orginalopions [] 中)
所有这一切的问题是该项目在数据库中创建了两次
alloption[] a future..
[{ID: 3, Inventory_Id: 37, status: 1, Quantity: 50}]
[{ID: 4, Inventory_Id: 37, status: 1, Quantity: 50}]
我认为问题出在 for-in 循环上。该程序没有如何检查项目是否已添加.. 谢谢。
async saveInventarioItemsUser () {
let self = this
let itemsToDb = []
let allOptions = self.items_config_inventario
let orginalOptions = self.items_config_inventario_original
for (let indexOpcionesUsuarioOriginal in orginalOptions) {
for (let indexOpcionesTablas in allOptions) {
if (allOptions[indexOpcionesTablas].inventario) {
if (orginalOptions[indexOpcionesUsuarioOriginal].inventario === allOptions[indexOpcionesTablas].inventario) {
if (allOptions[indexOpcionesTablas].cantidad !== orginalOptions[indexOpcionesUsuarioOriginal].cantidad || allOptions[indexOpcionesTablas].state !== orginalOptions[indexOpcionesUsuarioOriginal].state) {
let inventario = {
orden_trabajo: self.$route.params.editar,
inventario: allOptions[indexOpcionesTablas].inventario,
cantidad: allOptions[indexOpcionesTablas].cantidad,
state: allOptions[indexOpcionesTablas].state
}
self.saveIndividualItemInventario(allOptions[indexOpcionesTablas].id, inventario)
}
} else {
console.log('No coincide con .inventario_id', allOptions[indexOpcionesTablas])
}
} else {
if ((allOptions[indexOpcionesTablas].state !== 0 && allOptions[indexOpcionesTablas].state > 0) || allOptions[indexOpcionesTablas].cantidad >= 1) {
console.log('ITEM SIN INVENTARIO, CREAR')
console.log('ITEM SIN INVENTARIO, CREAR', allOptions[indexOpcionesTablas])
if (itemsToDb.length > 0) {
itemsToDb.map(item => {
if (item.id === allOptions[indexOpcionesTablas].id) {
console.log('ITEM EN ARRAY', allOptions[indexOpcionesTablas])
let data = {
orden_trabajo: self.$route.params.editar,
inventario: allOptions[indexOpcionesTablas].id,
cantidad: allOptions[indexOpcionesTablas].cantidad || 1,
state: allOptions[indexOpcionesTablas].state || 1
}
self.pushDBNewOpt(data)
} else {
console.log('PUSH ITEM')
itemsToDb.push(allOptions[indexOpcionesTablas])
console.log('PUSH ITEM', itemsToDb)
}
})
} else {
console.log('PUSH ITEM ELSE')
itemsToDb.push(allOptions[indexOpcionesTablas])
}
}
}
}
}
itemsToDb = []
}
pushDBNewOpt
async pushDBNewOpt (data) {
let self = this
await self._create(`endpoint/item/`, data, (response) => {
console.log('RESP saveInventarioItemsUser', response)
self.loadInventarioItemsUser()
})
},
解决方案
推荐阅读
- sql - Impala Regex 前瞻和后视的解决方法
- python - 在 oauth2_provider_accesstoken 模型中保存生成的访问令牌时,创建和更新的时间戳为空
- ajax - Laravel 使用 ajax 进行评论
- jquery - 选择的 jQuery 逆
- neo4j - 添加关系时neo4j增加计数
- mapreduce - Apache Crunch:如何设置多个输入路径?
- callback - chromecast 中的视频标签不会触发“等待”事件
- html - Bootstrap - 为反向行模式创建移动适配
- vue.js - 在 vue 中使用 props 发送数据
- asp.net-mvc - 是否可以在 MVC 中将 ViewBag 值从一个页面保留到另一个页面?