2016-11-06 1 views
0

Ich benutze Sequelize als ORM mit einer PostgreSQL-Engine. Beim Erzeugen von Roh-Abfragen verwendet, kann ich eine Tabelle und haben Spalten mit ‚Prüfen‘ Zwänge schaffen wieCHECK Einschränkungen in Seqeulize PostgreSQL ORM (Node.js)

CREATE TABLE products (
    product_no integer, 
    name text, 
    price numeric CHECK (price > 0) 
); 

In der Dokumentation ich kann nicht einen Weg, dies zu tun in Sequelize finden, wenn Modelle definieren. Gibt es eine Möglichkeit, dies zu tun? Ich will das Rad nicht neu erfinden;)

Danke !!

Antwort

0

Werfen Sie einen Blick auf die Validations section.

var Product = sequelize.define('product', { 
    price: { 
    validate: { 
     min: 0 // Only allow values >= 0 
    } 
    } 
}); 

Sie können auch festlegen, benutzerdefinierte Validierungsregeln:

var Product = sequelize.define('product', { 
    price: { 
    validate: { 
     isPositive: function (value) { 
     return value > 0; // Don't allow 0. 
     } 
    } 
    } 
}); 
+0

Ich glaube, das nur den Wert auf Anwendungsebene erzwingt. Ich glaube nicht, dass dies eine Einschränkung für den Tisch darstellt. Wenn Sie Migrationen fortfahren, können Sie eine unformatierte Abfrage ausführen, um die Einschränkung selbst einzufügen. – thgaskell

+0

Stimmen Sie dem obigen Kommentar zu. Ich habe nach einer Möglichkeit gesucht, die Synchronisierung und die Migration von Force zu synchronisieren (force-sync wird im circle-ci-Test verwendet). Die Lösung bestand darin, Migrationen anstelle von Force-Sync in circle-ci zu verwenden, ein bisschen langsamer, aber genauso gut. –

0
module.exports = { 

    up: (queryInterface, Sequelize) => { 

     return queryInterface.createTable('Products', { 
      product_no: { 
       type: Sequelize.INTEGER 
      }, 
      price: { 
       type: Sequelize.NUMERIC 
      }, 
      name: { 
       type: Sequelize.TEXT 
      } 
     }). 

     then(() => queryInterface.addConstraint('Products', ['price'], { 
      type: 'check', 
      where: { 
       price: { 
        [Sequelize.Op.gt]: 0 
       } 
      } 
     })); 
    }, 

    down: (queryInterface, Sequelize) => { 
     return queryInterface.dropTable('Products'); 
    } 
}; 
Verwandte Themen