序列化js自动增量主键传递空值

时间:2018-09-25 05:36:09

标签: sequelize.js

在我的 restaurant_images.js模型中

'use strict';
module.exports = (sequelize, DataTypes) => {
  const restaurant_images = sequelize.define('restaurant_images', {
    id: {
      type: DataTypes.INTEGER,
      primaryKey: true,
      autoIncrement: true
    },
    image_path: {
      type: DataTypes.STRING,
      allowNull: false
    },
    restaurant_id: {
      type: DataTypes.INTEGER
    }
  }, {});
  restaurant_images.associate = function (models) {
    restaurant_images.belongsTo(models.restaurants, {
      foreignKey: 'restaurant_id'
    })
  };
  return restaurant_images;
};

在我的控制器

const setImages = await db.restaurant_images.bulkCreate(images);

图像是一个对象数组,每个对象都有image_pathrestaurant_id

这会生成这样的查询。

`restaurant_images` (`id`,`image_path`,`restaurant_id`,`createdAt`,`updatedAt`) VALUES (NULL,'https://xxx.s3.us-east-2.amazonaws.com/',31,'2018-09-25 05:32:06','2018-09-25 05:32:06')

此处应将default传递给id列。但是它将id列传递给null

我尝试记录

的输出
const setImages = await db.restaurant_images.bulkCreate(images);

它给了我

SET IMAGES [ restaurant_images {
    dataValues:
     { id: 146,
       image_path: 'https://igateeatme.s3.us-east-2.amazonaws.com/hkjkjkj//Screenshot%20%284%29.png',
       restaurant_id: 36,
       createdAt: 2018-09-25T08:27:22.803Z,
       updatedAt: 2018-09-25T08:27:22.803Z },

它分配一个ID。但是唯一的问题是它不会插入该ID。 它不会在restaurant_images表中插入任何内容。

为什么会这样?

任何帮助

感谢进阶!

1 个答案:

答案 0 :(得分:0)

  

我认为,该表不是通过Sequlize sync创建的,您可能   是自己创建的,创建时忘了做主键   表格,

     

如果是这种情况,则您的模型定义要影响您的表   除非您运行model.sync(),否则它将变为相对   根据您的模型定义更改数据库。

     

除非您运行model.sync()

,否则模型定义将一直影响您的实际数据库表

您可以删除,因为如果运行model.sync()

,Sequlize js将默认为您创建主键。
id: {
  type: DataTypes.INTEGER,
  primaryKey: true,
  autoIncrement: true
}