it-swarm.com.de

Wie funktioniert autoIncrement in NodeJs Sequelize?

Das Dokument von Sequelize sagt nicht viel über autoIncrement aus. Es enthält nur das folgende Beispiel:

// autoIncrement can be used to create auto_incrementing integer columns
incrementMe: { type: Sequelize.INTEGER, autoIncrement: true }

Basierend auf diesem Beispiel habe ich den folgenden Code:

db.define('Entries', {
    id: {
        type: Seq.INTEGER,
        autoIncrement: true,
        primaryKey: true
    },
    title: {
        type: Seq.STRING,
        allowNull: false
    },
    entry: {
        type: Seq.TEXT,
        allowNull: false
    }
}

Wenn ich jetzt einen Eintrag erstellen möchte, möchte ich Folgendes tun:

models.Entry.create({title:'first entry', entry:'yada yada yada'})

Wenn ich diesen Code ausführe, erhalte ich jedoch einen Datenbankfehler: 

Ein Nullwert in der Spalte "id" verstößt gegen die Bedingung "null"

Ich würde davon ausgehen, dass Sequelize die ganze Zahl für mich einfügt oder die Datenbanktabelle definiert, um dies selbst zu tun. Scheinbar nicht? Was fehlt mir hier, um sicherzustellen, dass die ID automatisch inkrementiert und gefüllt wird?

Vielen Dank.

32
Eric H.

normalerweise passt sich Sequelize.js an die Datenbank an. Das Autoincrement-Attribut entspricht also einem seriellen Typ in PostgreSQL.

Ich habe bereits mit Sequelize gearbeitet und ich erinnere mich daran, dass Sie keine ID als Primärschlüssel angeben müssen. Sequelize erledigt das für Sie.

Versuchen Sie, kein id-Attribut hinzuzufügen, und prüfen Sie, ob Sequelize es nicht für Sie hinzufügen wird oder nicht.

21
Yacine Rezgui

Die Option omitNull config ist standardmäßig falsch. Setzen Sie ihn auf "true", und die id wird von Postgres erledigt:

sequelize = new Sequelize('mydb', 'postgres', null, {
  Host: 'localhost',
  port: 5432,
  dialect: 'postgres',
  omitNull: true
})

Visitor = sequelize.define('visitor', {
  email: Sequelize.STRING
})

Visitor.create({email: '[email protected]'})
9
mxgrn

Es hat für mich funktioniert, wenn ich das "id" -Feld manuell hinzugefügt habe (in diesem Fall fügt Sequelize es nicht automatisch hinzu) im Modell wie folgt:

Visitor = sequelize.define('visitor', {
  id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
  },
  email: Sequelize.STRING
})

ergebnis SQL-Befehl ist: "CREATE TABLE WENN NICHT EXISTS" Besucher "(" id "SERIAL," email "varchar (255) ..."

0
AdelaF