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 有触发器,它阻止更新。 我删除了触发器和更新作品...