Как работает autoIncrement в Sequelize NodeJs?
В документе 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'})
Однако, когда я выполняю этот код, я получаю ошибку базы данных:
Значение Null в столбце "id" нарушает не нулевое ограничение
Я бы предположил, что Sequelize поместит для меня целое число или определит таблицу базы данных, чтобы сделать это сам. Очевидно нет? Что мне здесь не хватает, чтобы убедиться, что идентификатор автоматически увеличивается и заполняется?
Большое спасибо.
Ответы
Ответ 1
Обычно Sequelize.js адаптируется к базе данных. Таким образом, атрибут autoincrement соответствует серийному типу в PostgreSQL.
Я уже работал с Sequelize и помню, что вам не нужно указывать id как первичный ключ. Sequelize сделает это за вас.
Попробуйте не добавлять атрибут id и посмотреть, не добавит ли Sequelize его для вас или нет.
Ответ 2
omitNull
параметр конфигурации по умолчанию - 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]'})
Ответ 3
Это сработало для меня, если бы я добавил вручную поле "id" (в этом случае Sequelize не будет добавлять его автоматически) в модели следующим образом:
Visitor = sequelize.define('visitor', {
id: {
type: Sequelize.INTEGER,
primaryKey: true,
autoIncrement: true
},
email: Sequelize.STRING
})
result Команда SQL: "CREATE TABLE, ЕСЛИ НЕ СУЩЕСТВУЕТ" посетитель "(" id "SERIAL," email "varchar (255)..."