Необработанный отказ SequelizeEagerLoadingError: Sequelize

1

Вот мои модели: sensor.js

   'use strict';
    module.exports = (sequelize, DataTypes) => {
      const Sensor = sequelize.define('Sensor', {
        sensorName: DataTypes.STRING,
        user: DataTypes.INTEGER
      }, {});
      Sensor.associate = function(models) {
        Sensor.hasMany(models.User, {
            foreignKey: 'user'
        })
      };
      return Sensor;
    };

user.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING
  }, {});
  User.associate = function(models) {
    User.belongsTo(models.Sensor, {
      foreignKey: 'user'
    })
  };
  return User;
};

Выполняя

Sensor.findAll({
  'raw':true,
  include: [{
    model: User
  }]
})
.then(function(result){
  console.log(result)
})

Я получаю следующую ошибку:

Необработанное отклонение SequelizeEagerLoadingError: Пользователь не связан с датчиком!

Теги:
sequelize.js
orm

1 ответ

0

Вы создаете столбец (user) с тем же именем, что и отношение объекта, которое, вероятно, вызывает конфликт. По умолчанию Sequelize автоматически создаст столбец userId (или user_id зависимости от настроек), и вам не нужно включать его в define() или ассоциацию, тогда как вы используете user для ID-отношения.

Используйте свойство as для определения отношений 1:n поскольку они являются множественными.

sensor.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const Sensor = sequelize.define('Sensor', {
    sensorName: DataTypes.STRING,
  }, {});
  Sensor.associate = function(models) {
    Sensor.hasMany(models.User, { as: 'users' })
  };
  return Sensor;
};

user.js

'use strict';
module.exports = (sequelize, DataTypes) => {
  const User = sequelize.define('User', {
    firstName: DataTypes.STRING,
    lastName: DataTypes.STRING,
    email: DataTypes.STRING
  }, {});
  User.associate = function(models) {
    User.belongsTo(models.Sensor)
  };
  return User;
};

запрос

Sensor.findAll({
  include: [{
    model: User,
    as: 'users,
  }],
})

Ещё вопросы

Сообщество Overcoder
Наверх
Меню