首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >express模型文件与迁移文件相比到底在做什么?

express模型文件与迁移文件相比到底在做什么?
EN

Stack Overflow用户
提问于 2018-05-21 15:49:33
回答 1查看 76关注 0票数 0

在处理mysql数据库时,我使用的是sequelize-cli迁移。

如果我键入以下命令

代码语言:javascript
复制
sequelize init

将创建两个文件夹modelsmigrations

另外,如果我设置两个模型之间的关联,例如

代码语言:javascript
复制
User.hasMany(Posts)

我必须手动将外键添加到迁移文件中。

(但不是模型文件,对吗?)

此外,迁移文件中还包含created_at、updated_at等列

但不在模型文件中。

当涉及到使用db.sync();时,没有这样的迁移文件,所以我不必手动将外键指向模型文件。

我知道迁移文件只与db表模式有关,但是模型文件到底在做什么呢?

该模型文件与db表无关吗?

我理解同步和迁移之间的区别,(同步删除所有表,如果要设置force:true,但不设置迁移)

但也许我无法理解内部发生了什么(迁移之间的模型)

任何建议都将不胜感激!

EN

回答 1

Stack Overflow用户

发布于 2018-05-23 15:53:09

当您使用sequelize-cli时,已经为您创建了createdAt和updatedAt列,因为sequelize使用它们来更新表。您可以禁用它们。

sequelize模型文件不需要createdAt和updatedAt来定义更改,因为它们是由sequelize完成的。

您必须手动将外键添加到迁移文件和模型中。模型文件是sequelize与数据库模式交互的参考。

它为sequelize设置参数,以触发对数据库的查询。您可以说迁移文件与您的数据库模式有关,而模型文件与您的数据库中存储的数据有关。

例如,考虑用户表及其basicinfo。

用户模型

代码语言:javascript
复制
module.exports = (sequelize, DataTypes) => {
  var Users = sequelize.define('users', {
    user_id: {
      type: DataTypes.STRING,
      primaryKey: true,
    },
   }, {});
  User.associate = function(models) {
    Users.hasOne(models.basicinfo, {
      foreignKey: 'user_id',
      as: 'BasicInfo'
    });
};
  return Users;
};

基本信息模型

代码语言:javascript
复制
module.exports = (sequelize, DataTypes) => {
  var basicinfo = sequelize.define('basicinfo', {
    first_name: {
      type: DataTypes.STRING,
    },
    last_name: {
      type: DataTypes.STRING,
    },
};{});
  basicinfo.associate = function (models) {
    basicinfo.belongsTo(models.users, {
      foreignKey: 'user_id',
      onDelete: 'CASCADE'
    });
  };
  return basicinfo;
};

希望这能消除你的困惑,当你使用这个伟大的库时,你会学到更多。

这是我对每个模型的迁移文件的更新答案。

user-migration

代码语言:javascript
复制
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('users', {
      user_id: {
        type: Sequelize.STRING,
        primaryKey: true,
      },
  });
 },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('users');
  }
};

basicinfo-migration

代码语言:javascript
复制
module.exports = {
  up: (queryInterface, Sequelize) => {
    return queryInterface.createTable('basicinfo', {
      id: {
        allowNull: false,
        autoIncrement: true,
        primaryKey: true,
        type: Sequelize.INTEGER
      },
      user_id: {
        type: Sequelize.STRING,
        allowNull: false,
        unique: true,
        onDelete: 'CASCADE',
        references: {
          model: 'users',
          key: 'user_id',
          as: 'user_id'
        }
      },
      profile_img: {
        type: Sequelize.STRING
      },
      first_name: {
        type: Sequelize.STRING,
      },
      last_name: {
        type: Sequelize.STRING,
      },
    });
  },
  down: (queryInterface, Sequelize) => {
    return queryInterface.dropTable('basicinfo');
  }
};
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50444226

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档