LoopbackJS,Angularjs sdk,模型。$保存重复
LoopbackJS, Angularjs sdk, model.$save duplicates
我正在使用 lopbackJS AngularJS sdk.I 有一个网站模型(id(pk) int,名称 varchar(50),url varchar(100))。
当我尝试更新名称并调用 site.save() 时,记录变得重复。如果我尝试更新除名称以外的其他字段,则更新成功。
有什么建议吗?
site.json :
{
"name": "Site",
"base": "PersistedModel",
"idInjection": false,
"mysql": {
"schema": "myDB",
"table": "Site"
},
"properties": {
"id": {
"type": "Number",
"id": true,
"required": true,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "Id",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "N"
},
"_selectable": true
},
"xmlFieldId": {
"type": "Number",
"required": false,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "XmlFieldId",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "Y"
},
"_selectable": true
},
"name": {
"type": "String",
"required": true,
"length": 150,
"precision": null,
"scale": null,
"mysql": {
"columnName": "Name",
"dataType": "varchar",
"dataLength": 150,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": true
},
"url": {
"type": "String",
"required": true,
"length": 600,
"precision": null,
"scale": null,
"mysql": {
"columnName": "Url",
"dataType": "varchar",
"dataLength": 600,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"active": {
"type": "Boolean",
"required": true,
"mysql": {
"columnName": "Active",
"dataType": "BOOL",
"nullable": "N"
},
"_selectable": true
},
"xmlUrl": {
"type": "String",
"required": false,
"length": 600,
"precision": null,
"scale": null,
"mysql": {
"columnName": "XmlUrl",
"dataType": "varchar",
"dataLength": 600,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"private": {
"type": "Boolean",
"required": true,
"mysql": {
"columnName": "Private",
"dataType": "BOOL",
"nullable": "N"
},
"_selectable": true
},
"xmlUrlValidated": {
"type": "Boolean",
"required": true,
"length": null,
"precision": 5,
"scale": 0,
"mysql": {
"columnName": "XmlUrlValidated",
"dataType": "BOOL",
"nullable": "N"
},
"_selectable": true
},
"xmlUrlValUpdate": {
"type": "Date",
"required": false,
"length": null,
"precision": null,
"scale": null,
"mysql": {
"columnName": "XmlUrlValUpdate",
"dataType": "datetime",
"dataLength": null,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"imgBaseUrl": {
"type": "String",
"required": false,
"length": 200,
"precision": null,
"scale": null,
"mysql": {
"columnName": "ImgBaseUrl",
"dataType": "varchar",
"dataLength": 200,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"credit": {
"type": "Number",
"required": false,
"length": null,
"precision": 8,
"scale": 2,
"mysql": {
"columnName": "Credit",
"dataType": "decimal",
"dataLength": null,
"dataPrecision": 8,
"dataScale": 2,
"nullable": "N"
},
"_selectable": true
}
},
"validations": [],
"relations": {
"siteCategorySteps": {
"type": "hasMany",
"model": "SiteCategoryStep",
"foreignKey": ""
},
"siteProdSchemas": {
"type": "hasOne",
"model": "SiteProdSchema",
"foreignKey": ""
},
"products": {
"type": "hasMany",
"model": "Product",
"foreignKey": ""
},
"users": {
"type": "hasMany",
"model": "UyguncaUser",
"foreignKey": "siteId"
}
},
"acls": [],
"methods": []
}
控制器:
'use strict';
MyApp.controller('SiteInfoController', ['$rootScope', '$scope', '$timeout', '$animate', 'Site', '$http', 'CheckXmlFile',
function ($rootScope, $scope, $timeout, $animate, Site, $http, CheckXmlFile) {
var site = null;
Site.findOne({
filter: {where: {id: $rootScope.globals.accessToken.user.siteId}}
}, function (fSite) {
site = $scope.site = fSite;
});
$scope.checkXmlUrl = function (showMesg, cb) {
CheckXmlFile.check({
xmlUrl: site.xmlUrl
}, function (res) {
site.xmlUrlValidated = true;
site.$save();
if (showMesg) showMsg({
title: "Bilgi!",
text: res.msg,
type: "success",
confirmButtonText: "Tamam",
}, null);
cb(true);
}, function (err) {
site.xmlUrlValidated = false;
site.$save();
if (showMesg) showMsg({
title: "Hata!",
text: err.data.errMsg,
type: "error",
confirmButtonText: "Tamam",
}, null);
cb(false);
})
};
$scope.save = function () {
!$scope.checkXmlUrl(false, function (err) {
if (!err) {
showMsg({
title: "Uyarı!",
text: "Kayıt yapıldı fakat XML dosya doğrulanamadı. XML dosya doğrulaması yapılmadan ürün bilgileri alınamayacaktır!",
type: "warning",
confirmButtonText: "Tamam",
}, null);
}
else {
showMsg({
title: "Bilgi!",
text: "XML dosya doğrulanarak site bilgileri kaydedilmiştir.",
type: "success",
confirmButtonText: "Tamam",
}, null);
}
});
}
}]);
我发现,'Site' table 有触发器,它阻止更新。
我删除了触发器和更新作品...
我正在使用 lopbackJS AngularJS sdk.I 有一个网站模型(id(pk) int,名称 varchar(50),url varchar(100))。 当我尝试更新名称并调用 site.save() 时,记录变得重复。如果我尝试更新除名称以外的其他字段,则更新成功。
有什么建议吗?
site.json :
{
"name": "Site",
"base": "PersistedModel",
"idInjection": false,
"mysql": {
"schema": "myDB",
"table": "Site"
},
"properties": {
"id": {
"type": "Number",
"id": true,
"required": true,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "Id",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "N"
},
"_selectable": true
},
"xmlFieldId": {
"type": "Number",
"required": false,
"length": null,
"precision": 10,
"scale": 0,
"mysql": {
"columnName": "XmlFieldId",
"dataType": "int",
"dataLength": null,
"dataPrecision": 10,
"dataScale": 0,
"nullable": "Y"
},
"_selectable": true
},
"name": {
"type": "String",
"required": true,
"length": 150,
"precision": null,
"scale": null,
"mysql": {
"columnName": "Name",
"dataType": "varchar",
"dataLength": 150,
"dataPrecision": null,
"dataScale": null,
"nullable": "N"
},
"_selectable": true
},
"url": {
"type": "String",
"required": true,
"length": 600,
"precision": null,
"scale": null,
"mysql": {
"columnName": "Url",
"dataType": "varchar",
"dataLength": 600,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"active": {
"type": "Boolean",
"required": true,
"mysql": {
"columnName": "Active",
"dataType": "BOOL",
"nullable": "N"
},
"_selectable": true
},
"xmlUrl": {
"type": "String",
"required": false,
"length": 600,
"precision": null,
"scale": null,
"mysql": {
"columnName": "XmlUrl",
"dataType": "varchar",
"dataLength": 600,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"private": {
"type": "Boolean",
"required": true,
"mysql": {
"columnName": "Private",
"dataType": "BOOL",
"nullable": "N"
},
"_selectable": true
},
"xmlUrlValidated": {
"type": "Boolean",
"required": true,
"length": null,
"precision": 5,
"scale": 0,
"mysql": {
"columnName": "XmlUrlValidated",
"dataType": "BOOL",
"nullable": "N"
},
"_selectable": true
},
"xmlUrlValUpdate": {
"type": "Date",
"required": false,
"length": null,
"precision": null,
"scale": null,
"mysql": {
"columnName": "XmlUrlValUpdate",
"dataType": "datetime",
"dataLength": null,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"imgBaseUrl": {
"type": "String",
"required": false,
"length": 200,
"precision": null,
"scale": null,
"mysql": {
"columnName": "ImgBaseUrl",
"dataType": "varchar",
"dataLength": 200,
"dataPrecision": null,
"dataScale": null,
"nullable": "Y"
},
"_selectable": true
},
"credit": {
"type": "Number",
"required": false,
"length": null,
"precision": 8,
"scale": 2,
"mysql": {
"columnName": "Credit",
"dataType": "decimal",
"dataLength": null,
"dataPrecision": 8,
"dataScale": 2,
"nullable": "N"
},
"_selectable": true
}
},
"validations": [],
"relations": {
"siteCategorySteps": {
"type": "hasMany",
"model": "SiteCategoryStep",
"foreignKey": ""
},
"siteProdSchemas": {
"type": "hasOne",
"model": "SiteProdSchema",
"foreignKey": ""
},
"products": {
"type": "hasMany",
"model": "Product",
"foreignKey": ""
},
"users": {
"type": "hasMany",
"model": "UyguncaUser",
"foreignKey": "siteId"
}
},
"acls": [],
"methods": []
}
控制器:
'use strict';
MyApp.controller('SiteInfoController', ['$rootScope', '$scope', '$timeout', '$animate', 'Site', '$http', 'CheckXmlFile',
function ($rootScope, $scope, $timeout, $animate, Site, $http, CheckXmlFile) {
var site = null;
Site.findOne({
filter: {where: {id: $rootScope.globals.accessToken.user.siteId}}
}, function (fSite) {
site = $scope.site = fSite;
});
$scope.checkXmlUrl = function (showMesg, cb) {
CheckXmlFile.check({
xmlUrl: site.xmlUrl
}, function (res) {
site.xmlUrlValidated = true;
site.$save();
if (showMesg) showMsg({
title: "Bilgi!",
text: res.msg,
type: "success",
confirmButtonText: "Tamam",
}, null);
cb(true);
}, function (err) {
site.xmlUrlValidated = false;
site.$save();
if (showMesg) showMsg({
title: "Hata!",
text: err.data.errMsg,
type: "error",
confirmButtonText: "Tamam",
}, null);
cb(false);
})
};
$scope.save = function () {
!$scope.checkXmlUrl(false, function (err) {
if (!err) {
showMsg({
title: "Uyarı!",
text: "Kayıt yapıldı fakat XML dosya doğrulanamadı. XML dosya doğrulaması yapılmadan ürün bilgileri alınamayacaktır!",
type: "warning",
confirmButtonText: "Tamam",
}, null);
}
else {
showMsg({
title: "Bilgi!",
text: "XML dosya doğrulanarak site bilgileri kaydedilmiştir.",
type: "success",
confirmButtonText: "Tamam",
}, null);
}
});
}
}]);
我发现,'Site' table 有触发器,它阻止更新。 我删除了触发器和更新作品...