Sequelizeのドキュメントは、autoIncrement
についてあまり詳しく述べていません。次の例のみが含まれます。
// autoIncrement can be used to create auto_incrementing integer columns
incrementMe: { type: Sequelize.INTEGER, autoIncrement: true }
この例に基づいて、次のコードがあります。
db.define('Entries', {
id: {
type: Seq.INTEGER,
autoIncrement: true,
primaryKey: true
},
title: {
type: Seq.STRING,
allowNull: false
},
entry: {
type: Seq.TEXT,
allowNull: false
}
}
エントリーを作成したいとき、次のようなことをしたいです:
models.Entry.create({title:'first entry', entry:'yada yada yada'})
ただし、そのコードを実行すると、データベースエラーが発生します。
列「id」のヌル値が非ヌル制約に違反しています
Sequelizeが整数を入力するか、データベーステーブルを定義してそれを行うと仮定します。どうやら? IDが自動的に増分され、入力されるようにするために、ここで何が欠けていますか?
どうもありがとう。
通常、Sequelize.jsはデータベースに適応します。そのため、autoincrement属性はPostgreSQLのシリアルタイプに対応しています。
私はすでにSequelizeで働いていましたが、覚えているのは、主キーとしてidを指定する必要がないということです。 Sequelizeはあなたのためにそれを行います。
Id属性を追加しないで、Sequelizeが追加しないかどうかを確認してください。
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]'})
次のようなモデルに「id」フィールドを手動で追加した場合(この場合、Sequelizeは自動的に追加しません)、それは私にとってはうまくいきました:
Visitor = sequelize.define('visitor', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
email: Sequelize.STRING
})
結果SQLコマンドは、「CREATE TABLE IF NOT EXISTS "visitor"( "id" SERIAL、 "email" varchar(255)...」です。