2015-04-07 26 views
6

Yeni bir satır oluştururken başlatılabilen, ancak hiçbir zaman güncellenemeyen bir MySQL tablosunda Sequelize kullanarak bir sütun oluşturmak mümkün mü? Örneğin, bir REST servisi kullanıcının bir kullanıcının profilini güncellemesine izin verir. id dışında herhangi bir alanı değiştirebilir. API yolundaki istek üzerine id'u kapatabilirim, ancak bu biraz fazlalıktır, çünkü benzer şekilde davranan çok sayıda farklı model vardır. İdeal olarak, id sütununun DEFAULT'dan başka bir değere ayarlanmasını engelleyen bir Sequelize kısıtlaması tanımlamak istiyorum.Güncellenemeyen bir Sequelize sütun

Şu anda için bir setterMethod kullanıyorum ValidationError, ancak bu hackish görünüyor, bu yüzden bunu yapmak daha temiz bir yolu olup olmadığını merak ediyordum. Daha da kötüsü, bu uygulamanın hala yeni bir kayıt oluştururken id'un ayarlanmasına izin vermesidir, ancak, Sequelize, DEFAULT değerini ayarlamak için setterMethods.id aramasını yaptığı sorguyu oluşturduğunda bunu bilmiyorum. Bu Sequelize eklenti de

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

Sadece aynısını merak ediyorum. https://github.com/sequelize/sequelize/issues/4603 – diosney

cevap

3

Görünüş:

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

Hiçbir güncelleme için destek ekler ve salt okunur Sequelize modellerinde bağlıyor. null ise

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

title özelliğinin ilk setini sağlayacak Yani, sonra bir kez zaten ayarlanmış başka değişiklikler önlemek: Belirli bir durumda

, aşağıdaki bayraklarıyla niteliğini yapılandırabilirsiniz .

Yasal Uyarı: Ben eklenti yazarıyım.