Sequelize:更新数据库架构

时间:2017-07-12 13:15:21

标签: node.js sequelize.js

在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。但我能得到的只是包含所有字段的表格,但没有关联(外键)。 有没有办法根据模型文件更新数据库架构?或者我将不得不手动编辑迁移文件,然后运行迁移?

1 个答案:

答案 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]