如何在sequelizejs中添加关联?

时间:2014-11-26 08:01:18

标签: mysql node.js express sequelize.js

我正在用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:无法添加
  外键约束   ....

1 个答案:

答案 0 :(得分:3)

我建议你跑步:

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.