我正在使用Sequelize.js創建一些表。這些模型是用戶,商店,角色和ShopUserRoles。在模型之間創建關聯
我已經宣佈在models/
文件夾喜歡的機型:
user.js的
module.exports = function (sequelize, DataTypes) {
var User = sequelize.define('User', {
id : {
type: DataTypes.STRING,
unique: true,
primaryKey : true
},
fullName : {
type: DataTypes.STRING,
field: 'full_name',
allowNull : false
},
}, {
tableName: 'users',
classMethods: {
associate: function(models) {
User.hasMany(models.ShopUserRoles, {foreignKey: 'user_id' });
}
},
timestamps: true,
createdAt : 'created_at',
updatedAt : 'updated_at'
});
return User;
};
Shop.js
module.exports = function(sequelize, DataTypes) {
var Shop = sequelize.define('Shop', {
id : {
type : DataTypes.INTEGER,
unique : true,
primaryKey : true
},
shopName : {
type : DataTypes.STRING,
field : 'shop_name',
allowNull : false
},
status : {
type: DataTypes.STRING
}
}, {
tableName : 'shops',
classMethods : {
associate : function(models) {
Shop.hasMany(models.ShopUserRoles, {foreignKey : 'shop_id'});
}
},
timestamps : true,
createdAt : 'created_at',
updatedAt: 'updated_at'
});
return Shop;
};
Role.js
module.exports = function(sequelize, DataTypes){
var Role = sequelize.define('Role', {
id : {
type: DataTypes.INTEGER,
unique: true,
primaryKey: true
},
name : {
type: DataTypes.STRING,
unique: true
}
}, {
tableName : 'roles',
classMethods : {
associate : function(models) {
Role.hasMany(models.ShopUserRoles, {foreignKey: 'role_id'});
}
},
timestamps : true,
createdAt : 'created_at',
updatedAt: 'updated_at'
});
return Role;
};
ShopU serRoles.js
module.exports = function(sequelize, DataTypes) {
var ShopUserRoles = sequelize.define('ShopUserRoles', {
}, {
tableName : 'shop_user_roles',
classMethods: {
associate: function(models) {
ShopUserRoles.belongsTo(models.User, {foreignKey: 'user_id' });
ShopUserRoles.belongsTo(models.Shop, {foreignKey : 'shop_id'});
ShopUserRoles.belongsTo(models.Role, {foreignKey: 'role_id'});
}
},
timestamps : true,
createdAt : 'created_at',
updatedAt : 'updated_at'
});
return ShopUserRoles;
};
而且我使用sequelize['import'](FILENAME)
格式導入他們並添加相應的關聯。
現在,因爲我們已經添加了關聯,所以應該在生成前三個表之後創建表shop_user_roles
,否則外鍵添加將不起作用。但是,我看到Sequelize正在試圖在users
表創建之前創建此表。爲了解決這個問題,我有三種選擇:
- 只有在表已創建
- 分配表創建一個明確的排序或讓Sequelize「數字」的事情了智能
- 試圖做分配協會整個事情兩次(這是笨拙的,我不希望它在開發代碼)
至於前兩個選項,我不完全確定如何做那些使用Sequelize.js。任何形式的參考或幫助將不勝感激。
我正在使用Sequelize.js v3.9。