在Sequelize中我有以下模型文件:collection.js
'use strict';
module.exports = function(sequelize, DataTypes) {
var Collection = sequelize.define('Collection', {
title: DataTypes.STRING,
bundleSize: DataTypes.INTEGER
}, {
classMethods: {
associate: function(models) {
Collection.belongsTo(models.User, {
onDelete: 'CASCADE',
foreignKey: {
allowNull: false,
}
})
}
}
});
return Collection;
};
我正在使用Sequelize在github上提供的快速示例。
我是通过sequelize-cli创建的,然后手动添加关系。但现在我无法创建外键。我使用Sync with force等于true。但我能得到的只是包含所有字段的表格,但没有关联(外键)。 有没有办法根据模型文件更新数据库架构?或者我将不得不手动编辑迁移文件,然后运行迁移?
答案 0 :(得分:0)
如果不在关联选项中提供foreignKey属性,将自动创建foreignKey。它将包含母表名称和'Id'后缀。在您的情况下,它将在“集合”表中的“UserId”字段
Collection.belongsTo(models.User,{ onDelete:'CASCADE' })
如果要提供自定义外键,则应该是STRING或带有字段属性的选项对象,它们将是表中列的名称。
User.hasMany(models.Collection, {
onDelete: 'CASCADE',
foreignKey: {
name: 'myCustomForeignKey',
field: 'my_custom_foreign_key'
}
})
Collection.belongsTo(models.User, {
onDelete: 'CASCADE',
foreignKey: {
name: 'myCustomForeignKey',
field: 'my_custom_foreign_key'
}
})
我不确定如何在app sequelize中将foreignKey表字段名称正确别名。有可能以下就足够了
db.Collection.findAll({where: {myCustomForeignKey: 22}})
它将创建自动应用内别名'myCustomForeignKey'以及表格列'my_custom_foreign_key
因此,以下查询应该给出相同的结果:
sequelize.query('select * from collections where my_custom_foreign_key=22')
new unsigned int[UINT32_MAX]