在我的 Wix 网站中,我创建了一个数据库,并且名为“ giaCode
”的字段应该唯一。
问题是 Wix 数据库没有任何功能来保留唯一的项-例如外键。
因此,我决定创建一个函数来搜索和删除数据库中的所有重复项。但这是行不通的。
该过程应为:
下面的Wix代码( data.js
):
import wixData from 'wix-data';
let n,i,j,duplicateData,items;
let k = 0;
wixData.query("Diamond")
.count()
.then( (num) => {
n = num;
});
wixData.query("Customer")
.find()
.then( (data) => {
items = data.items;
});
export function checkDuplicates(value, info) {
for (i = 0; i < n; i++) {
for (j = 0; i < n; j++) {
wixData.query("myCollection")
.eq("giaCode", items[i].giaCode)
.find()
.then ((DupResults) => {
duplicateData[k][j] = DupResults.items;
k++;
});
}
}
for (i = 0; i < k; i++) {
for (j = 1; j < duplicateData[k][j].giaCode.length; j++) {
wixData.remove("Diamond", duplicateData[i][j].giaCode)
}
}
}
export function Diamond_afterInsert(item, context) {
checkDuplicates()
}
应该可以,但是我收到错误消息: enter image description here
答案 0 :(得分:0)
如果我对您的理解正确,那么您在做错几件事。也就是说,如果您试图阻止将重复项添加到集合中。
beforeInsert
钩子,使该项目永远不会进入集合,而要在它已经存在之后将其删除。giaCode
的现有项以及重复项。我认为那不是您想要的。.eq()
。您并不是在说它应该等于什么值。尝试以下方法:
import wixData from 'wix-data';
export function searchForDuplicates(value) {
return wixData.query("Diamond")
.eq("giaCode", value)
.find()
.then((results) => {
return results.items.length;
})
.catch((err) => {
let errorMsg = err;
});
}
export function Diamond_beforeInsert(item) {
return searchForDuplicates(item.giaCode).then((res) => {
if(res > 0) {
return Promise.reject("Duplicate");
}
return item;
});
}
我将其切换到beforeInsert
挂钩,修复了.eq()
,并删除了所有不必要的代码。