2015-04-07 35 views
6

是否有可能使用Sequelize在MySQL表上創建列,該列可以在創建新行時初始化,但從未更新過?無法更新的Sequelize列

例如,REST服務允許用戶更新他的個人資料。他可以改變除他的id之外的任何領域。我可以從API路徑上的請求中去除id,但這有點多餘,因爲有許多不同的模型行爲相似。理想情況下,我希望能夠在Sequelize中定義一個約束,以防止將id列設置爲DEFAULT以外的任何其他值。

目前,我使用的setterMethodid手動拋出ValidationError,但這似乎hackish,所以我想知道是否有一個更乾淨的方式做到這一點。更糟糕的是,這個實現仍然允許在創建新記錄時設置id,但我不知道解決此問題的方法,因爲Sequelize生成查詢時調用setterMethods.id將值設置爲DEFAULT

return sequelize.define('Foo', 
    { 
     title: { 
      type: DataTypes.STRING, 
      allowNull: false, 
      unique: true, 
      validate: { 
       notEmpty: true 
      } 
     } 
    }, 
    { 
     setterMethods: { 
      id: function (value) { 
       if (!this.isNewRecord) { 
        throw new sequelize.ValidationError(null, [ 
         new sequelize.ValidationErrorItem('readonly', 'id may not be set', 'id', value) 
        ]); 
       } 
      } 
     } 
    } 
); 
+1

只是想知道同樣的。 https://github.com/sequelize/sequelize/issues/4603 – diosney

回答

3

看這個Sequelize插件:

https://www.npmjs.com/package/sequelize-noupdate-attributes

它增加了對沒有更新和只讀在Sequelize模型屬性。

在特定情況下,可以用下面的標誌配置屬性:

{ 
    title: { 
    type: DataTypes.STRING, 
    allowNull: false, 
    unique : true, 
    noUpdate : true 
    } 
} 

這將使最初設定的title屬性,如果爲空,然後阻止任何進一步的修改,一旦已經設置。

聲明:我是插件作者。