Sequelize del documento no dice mucho acerca de autoIncrement. Sólo se incluye el siguiente ejemplo:

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

Basados en este ejemplo tengo el siguiente código:

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

Ahora cuando quiero crear una entrada quiero hacer algo como esto:

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

Sin embargo, al ejecutar ese código me sale un error de base de datos:

Valor Null en la columna «id» viola la restricción not null

Supongo Sequelize pondría el número entero para mí o para definir la tabla de base de datos para hacer eso mismo. Aparentemente, no? Lo que me estoy perdiendo aquí para asegurarse de que el id se incrementa automáticamente y se llena?

Muchas gracias.

InformationsquelleAutor Eric H. | 2013-04-01

3 Comentarios

  1. 22

    normalmente Sequelize.js adaptarse a la misma, con el databse. Así que el autoincrement atributo corresponde a un tipo de serie en PostgreSQL.

    Ya he trabajado con Sequelize y lo que recuerdo es que usted no necesita especificar un id como clave principal. Sequelize va a hacer por usted.

    Tratar de no agregar un atributo id y ver si Sequelize no añadir para usted o no.

    • lo siento desplazado proyecto de prioridades, pero voy a volver a usted este fin de semana en este.
    • este es el adecuado para mis propósitos, pero aún se preguntan cuál es el propósito de la autoIncrement se si tenga que escribirla cada vez. Quizá me esté mal configurado.
    • el problema es cómo dar personalizado primarykey nombres !
    • Usted puede hacer defaultValue: invokeGenerateCustomId() en las opciones
    • Debo especificar el campo id como voy a usar eso como una clave externa a referir a otra mesa me puedes contar de una manera?
  2. 10

    omitNull opción de configuración por defecto es false. Se establece en true, y la id va a ser atendido por 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]'})
    • Como por este problema, omitNull que no deberían ser utilizadas. Uso autoIncrement: true lugar en la columna correspondiente en la definición del modelo y simplemente no proporcionan un valor a la hora de hacer la create().
    • Esto no funciona para mí. Tengo el mismo problema como el autor.
    • gracias a sus trabajos para mí, si no ommit valor null, postgresql pondrá valor nulo en el interior de la declaración. github.com/sequelize/sequelize/issues/925
    • Tienen que encontrar una solución?
  3. 0

    Que trabajó para mí si he añadido manualmente el campo «id» (en este caso Sequelize no agregarlo automáticamente) en el modelo como este:

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

    resultado comando SQL es: «CREATE TABLE IF not EXISTS «visitante» («id» de SERIE, «correo electrónico» varchar(255)…»

Dejar respuesta

Please enter your comment!
Please enter your name here