Проблема с Sequelize и указанием внешнего ключа в ассоциации - PullRequest
0 голосов
/ 16 мая 2019

У меня есть места размещения, которые принадлежат приложению. Foreign_key в таблице мест размещения - это appId (не AppId). Я указал следующее, но получаю ошибку:

Unhandled rejection SequelizeDatabaseError: column Placements.AppId does not exist

Модель моего размещения:

'use strict';
const App = require('./').App

module.exports = (sequelize, DataTypes) => {
  const Placement = sequelize.define('Placement', {
    name: DataTypes.STRING,

    isActive: DataTypes.BOOLEAN,
  }, {
    tableName: 'placements'
  });
  Placement.associate = function(models) {
    Placement.belongsTo(models.App, { foreignKey: 'appId'})

    // associations can be defined here
  };
  return Placement;
};

Как мне сказать Sequelize, что ForeignKey - это appId, а не AppId?

Ответы [ 3 ]

0 голосов
/ 16 мая 2019

Попробуйте использовать свойство поля

Placement.belongsTo(models.App, { 
    foreignKey: {
        name: 'AppId',
        field: 'appId'
        }
    }
)
0 голосов
/ 16 мая 2019

В модели приложения должны присутствовать столбцы AppId.Явное указание { foreignKey: 'appId'}) на ownTo заставляет Sequelize использовать ключ как есть.

Таким образом, вам нужно создать модель приложения, которая имеет -

const App = sequelize.define('App', {
AppId: DataTypes.INTEGER,
..

}, {
tableName: 'App'
});

Другой вариант - изменить это

Placement.belongsTo(models.App, { foreignKey: 'appId'})

до

Placement.belongsTo(models.App)

Таким образом, Sequelize автоматически обрабатывает все отношения между моделями.

0 голосов
/ 16 мая 2019

Хм ... Я не вижу ничего плохого в вашем коде.Какую версию Sequelize вы используете?

Просто пара несвязанных комментариев:

  1. Вам не нужно импортировать приложение, оно уже есть в объекте моделей.

  2. Я думаю, вам не нужен параметр tableName.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...