Добавление ассоциации против добавления настраиваемого столбца внешнего ключа в sequelize node.js - PullRequest
1 голос
/ 04 апреля 2020

я учу node js и sequelize и запутался в сценарии. Прежде всего, взгляните на модель, которую я определил.

class Car extends Sequelize.Model {
static init(sequelize, DataTypes) {
    return super.init({
      id: {
        allowNull: false,
        type: Sequelize.INTEGER,
        autoIncrement: true,
        primaryKey: true,  
       },
        name:{ 
        type: DataTypes.STRING(20),
        defaultValue:''
       },
        //CASE 1 == can define custom foreign column like this
        company_id: {
            type: Sequelize.INTEGER,
            references: {
                   model: 'Company',
                  key: 'id',
               },
           allowNull: false,
      },  

      },
      {
       sequelize,
       tableName: 'Car'
      }
    );
  }


  //CASE 2 == can define association like this
  static associate(models) {
      this.myAssociation = this.belongsTo(models.Company);

  }

}

Когда я следую примеру 1, это добавляет в качестве столбца в таблице car, а когда я запускаю случай 2, он автоматически добавляет столбец ComapanyId в таблице. Однако, если я запускаю и случай 1, и случай 2, то создаются два столбца. Один пользовательский и один, созданный ассоциацией. Но я запутался, который является правильным способом добавления ограничения внешнего ключа между двумя таблицами. моя концепция понятна. Спасибо.

1 Ответ

1 голос
/ 04 апреля 2020

Вы можете указать, какое поле будет использоваться в качестве внешнего ключа в определении ассоциации:

this.myAssociation = this.belongsTo(models.Company, { foreignKey: 'company_id' });

Если вы не используете метод syn c для автоматического создания таблиц для ваших моделей тогда CASE 1 используется в миграциях, указывающих другую сторону внешнего ключа, а CASE 2 должен работать со связанными моделями, когда вы создаете / читаете / обновляете / удаляете записи в БД с помощью моделей секвелирования.

...