Вот мои модели: 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: Пользователь не связан с датчиком!
Вы создаете столбец (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,
}],
})