我正在使用express和sequelizejs进行项目。这是我第一次尝试sequellize,在goodsgoodsImg两个表之间有一些关联。请帮忙。

Goods型号:

"use strict";
module.exports = function(sequelize, DataTypes) {
  var Goods = sequelize.define('Goods', {
    id: {
        type: DataTypes.BIGINT,
        primaryKey:true,
        allowNull: false
    },
    goodsID:{
        type:DataTypes.STRING,
        allowNull: false
    } ,
     ...
},{
      classMethods: {
          associate: function(models) {
              Goods.hasMany(models.GoodsImg, { onDelete: 'SET NULL', onUpdate: 'CASCADE' });
          }
      }
  });

  return Goods;
};


goodsImg型号:

module.exports = function(sequelize, DataTypes) {
  var GoodsImg = sequelize.define('GoodsImg', {
    id: {
        type: DataTypes.BIGINT,
        primaryKey:true,
        allowNull: false
    },
    goodsID:{
        type:DataTypes.STRING,
        allowNull: false,
        references : 'goods',
        referencesKey:'id'
    } ,
    ....
},{
      classMethods:{
          associate: function(models){
              GoodsImg.belongsTo(models.Goods,{ foreignKey: 'id', foreignKeyConstraint:true });
          }
      }
  });

  return GoodsImg;
};


使用sync()时,它可以在数据库中生成goods表,而goodImg不能。并出现一个错误:


  执行中(默认):从Goods显示索引可能未处理
  SequelizeDatabaseError:错误:ER_CANNOT_ADD_FOREIGN:无法添加
  外键约束
  ....

最佳答案

可能我建议您运行:

SHOW ENGINE INNODB STATUS\G


并检查该部分(这里是一个示例):

------------------------
LATEST FOREIGN KEY ERROR
------------------------
...
You have defined a SET NULL condition though some of the
columns are defined as NOT NULL.

10-01 03:32