2015-04-07 13 views
6

E 'possibile creare una colonna su una tabella MySQL usando Sequelize che può essere inizializzata quando si crea una nuova riga, ma mai aggiornata?Una colonna Sequalize che non può essere aggiornata

Ad esempio, un servizio REST consente a un utente di aggiornare il proprio profilo. Può cambiare qualsiasi campo eccetto il suo id. Posso rimuovere il numero id dalla richiesta sulla route API, ma è un po 'ridondante perché ci sono diversi modelli che si comportano allo stesso modo. Idealmente, mi piacerebbe essere in grado di definire un vincolo in Sequelize che impedisce alla colonna id di essere impostata su un valore diverso da DEFAULT.

Attualmente, sto utilizzando un setterMethod per il per lanciare manualmente un ValidationError, ma questo sembra hacker, quindi mi chiedevo se c'è un modo più pulito di farlo. Ancora peggio è che questa implementazione consente ancora di impostare id durante la creazione di un nuovo record, ma non conosco un modo per aggirare questo come quando Sequelize genera la query che chiama setterMethods.id per impostare il valore su 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

Basta chiedersi lo stesso. https://github.com/sequelize/sequelize/issues/4603 – diosney

risposta

3

Guardate questo plugin Sequelize:

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

Si aggiunge il supporto per alcun aggiornamento e attributi di sola lettura nei modelli Sequelize.

Nel vostro caso specifico, è possibile configurare l'attributo con i seguenti flag:

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

che permetterà l'insieme iniziale dell'attributo title se è nullo, e quindi prevenire eventuali ulteriori modifiche una volta è già impostato .

Disclaimer: Sono l'autore del plugin.

Problemi correlati