Javascript 如何在连接表时忽略sequelize中的特定外键?
为了弄清楚这件事,我最近几个小时一直在发毛。我正在为Javascript 如何在连接表时忽略sequelize中的特定外键?,javascript,node.js,postgresql,express,sequelize.js,Javascript,Node.js,Postgresql,Express,Sequelize.js,为了弄清楚这件事,我最近几个小时一直在发毛。我正在为express应用程序使用sequelizeorm。sequelizedoc对我来说非常混乱,我一直在努力寻找解决方案,但到目前为止都没有 我有三个协会 //models/device.js device.associate = function(models) { device.hasMany(models.actuator_activity, { foreignKey: 'actuator_devic
express
应用程序使用sequelize
orm。sequelize
doc对我来说非常混乱,我一直在努力寻找解决方案,但到目前为止都没有
我有三个协会
//models/device.js
device.associate = function(models) {
device.hasMany(models.actuator_activity, {
foreignKey: 'actuator_device_id',
as: 'actuator_activities',
});
device.hasMany(models.actuator_activity, {
foreignKey: 'sensor_device_id',
});
device.hasMany(models.sensor_data, {
foreignKey: 'sensor_device_id',
as: 'sensor_data',
});
};
//models/sensordata.js
sensor_data.associate = function(models) {
sensor_data.belongsTo(models.device, {
foreignKey: 'sensor_device_id',
onDelete: 'CASCADE',
});
};
//models/actuatoractivity.js
actuator_activity.associate = function(models) {
actuator_activity.belongsTo(models.device, {
foreignKey: 'actuator_device_id',
onDelete: 'CASCADE',
});
actuator_activity.belongsTo(models.device, {
foreignKey: 'sensor_device_id',
onDelete: 'CASCADE',
});
};
运行此查询
device.findAll({include:[{model: sensor_data, as: 'sensor_data'}, {model: actuator_activity, as: 'actuator_activities'}]})
返回以下内容:
{
"id": 2,
"name": "TEST DEVICE 2",
"role": "SENSOR",
"type": "SOIL MOISTURE",
"io_pin": 5,
"added_timestamp": "2019-05-01T12:18:08.317Z",
"client_added_timestamp": "2019-04-23T20:44:29.597Z",
"min_value": 0,
"max_value": 1000,
"sensor_data": [
{
"id": 2,
"sensor_device_id": 2,
"created_timestamp": "2019-04-23T20:44:29.597Z",
"sensor_value": 300
}
],
"actuator_activities": [
{
"id": 1,
"created_timestamp": "2019-04-23T20:44:29.597Z",
"name": "Motor turned on",
"actuator_device_id": 1,
"sensor_device_id": 2
}
]
},
{
"id": 1,
"name": "TEST DEVICE 1",
"role": "ACTUATOR",
"type": "MOTOR",
"io_pin": 7,
"added_timestamp": "2019-05-01T12:17:14.026Z",
"client_added_timestamp": "2019-04-23T20:44:29.597Z",
"min_value": 0,
"max_value": 1,
"sensor_data": [],
"actuator_activities": []
}
但我想得到的是:
{
"id": 2,
"name": "TEST DEVICE 2",
"role": "SENSOR",
"type": "SOIL MOISTURE",
"io_pin": 5,
"added_timestamp": "2019-05-01T12:18:08.317Z",
"client_added_timestamp": "2019-04-23T20:44:29.597Z",
"min_value": 0,
"max_value": 1000,
"sensor_data": [
{
"id": 2,
"sensor_device_id": 2,
"created_timestamp": "2019-04-23T20:44:29.597Z",
"sensor_value": 300
}
],
},
{
"id": 1,
"name": "TEST DEVICE 1",
"role": "ACTUATOR",
"type": "MOTOR",
"io_pin": 7,
"added_timestamp": "2019-05-01T12:17:14.026Z",
"client_added_timestamp": "2019-04-23T20:44:29.597Z",
"min_value": 0,
"max_value": 1,
"actuator_activities": [
{
"id": 1,
"created_timestamp": "2019-04-23T20:44:29.597Z",
"name": "Motor turned on",
"actuator_device_id": 1,
"sensor_device_id": 2
}
]
}
这里的想法是将id
与嵌套的执行器\设备\ id
和传感器\设备\ id
如果我删除了与执行器\u活动
和设备
与外键传感器\u设备\u id
的关联,它将按照我的预期工作,但我需要保留它,因为我需要两列的执行器\u活动
的级联选项
例如,有没有一种方法可以指定在查询时忽略/排除此特定外键
如果不是,我如何在这里实现我的目标
非常感谢您的帮助,谢谢您阅读这篇长文章