2013-04-01 7 views
29

Sequelizeの文書では、autoIncrementについてはあまり言いません。今、私はこのような何かをしたいエントリを作成したいときNodeJsのSequelizeでautoIncrementはどのように機能しますか?

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

:私は、次のコードを持っている。この例のオフに基づいて

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

それだけで、次の例が含まれて
models.Entry.create({title:'first entry', entry:'yada yada yada'}) 

しかし、私はそのコードを実行するとき、私は、データベースのエラーを取得:

Null value in column "id" violates not null constraint

Sequelizeは私のために整数を入れたり、それ自体を行うデータベーステーブルを定義したりします。どうやらないのですか? IDが自動的にインクリメントされて塗りつぶされるように、私はここで何が欠けていますか?

ありがとうございました。

答えて

14

通常Sequelize.jsはdatabseに適合します。 autoincrement属性はPostgreSQLのシリアル型に対応しています。

すでにSequelizeで作業していましたが、私が覚えているのは、idを主キーとして指定する必要がないということです。 Sequelizeはあなたのためにそれを行います。

id属性を追加しないで、Sequelizeで追加しないかどうかを確認してください。

+0

ごめんシフトしたプロジェクトの優先順位が、私はこの週末にあなたに戻ってくるでしょう。 –

+1

これは私の目的のためには正しいですが、それでも不思議ですあなたが毎回それを入力しなければならない場合、 'autoIncrement'の目的は何ですか?おそらく私は誤った設定をしていました。 –

+0

問題は、カスタムプライマリキー名を与える方法です! –

8

omitNullデフォルトではconfigオプションはfalseです。これをtrueに設定し、idはPostgresのでの世話をされます。

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]'}) 
+5

[この報告された問題](https://github.com/sequelize/sequelize/issues/2813)によると、「omitNull」は使用されなくなりました。モデル定義の対応する列の代わりに 'autoIncrement:true'を使用し、単に' create() 'を実行したときに値を与えないでください。 –

+0

@ ThalisK。 :これは私にとってはうまくいかない。著者と同じ問題があります。 – akohout

+0

@mxgrn、私のために働いてくれてありがとう、もしnull値ではないなら、postgresqlは文の中にnull値を入れます。 https://github.com/sequelize/sequelize/issues/925 –

0
モデルでは、私は(このケースでSequelizeはautomaticalyそれを追加しません)てmanualy「ID」フィールドを追加した場合、それは私のために働いた

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

結果SQLコマンドは次のとおりです:このような訪問者 "( "ID "SERIAL、 "電子メール" NOTが存在する場合は、CREATE TABLE" を" VARCHAR(255)..."

関連する問題