【发布时间】:2016-10-15 12:40:29
【问题描述】:
我有两张桌子,locations 和 sensors。 sensors 中的每个条目都有一个指向 locations 的外键。使用 Sequelize,我如何获取来自 locations 的所有条目以及与 locations 中的每个条目相关联的 sensors 中的条目总数?
原始 SQL:
SELECT
`locations`.*,
COUNT(`sensors`.`id`) AS `sensorCount`
FROM `locations`
JOIN `sensors` ON `sensors`.`location`=`locations`.`id`;
GROUP BY `locations`.`id`;
型号:
module.exports = function(sequelize, DataTypes) {
var Location = sequelize.define("Location", {
id: {
type: DataTypes.INTEGER.UNSIGNED,
primaryKey: true
},
name: DataTypes.STRING(255)
}, {
classMethods: {
associate: function(models) {
Location.hasMany(models.Sensor, {
foreignKey: "location"
});
}
}
});
return Location;
};
module.exports = function(sequelize, DataTypes) {
var Sensor = sequelize.define("Sensor", {
id: {
type: DataTypes.INTEGER.UNSIGNED,
primaryKey: true
},
name: DataTypes.STRING(255),
type: {
type: DataTypes.INTEGER.UNSIGNED,
references: {
model: "sensor_types",
key: "id"
}
},
location: {
type: DataTypes.INTEGER.UNSIGNED,
references: {
model: "locations",
key: "id"
}
}
}, {
classMethods: {
associate: function(models) {
Sensor.belongsTo(models.Location, {
foreignKey: "location"
});
Sensor.belongsTo(models.SensorType, {
foreignKey: "type"
});
}
}
});
return Sensor;
};
【问题讨论】:
-
这真的是你想要的
SQL吗?我不认为这会像你想象的那样做。事实上,我不确定查询是否会运行而不会引发错误。 -
@dvlsg 我运行它,它正确返回了
locations表中的所有行和字段,并且为每一行返回了sensors中正确数量的关联条目。 -
其实@dvlsg,这是不对的。我做了更多测试(
locations表中有更多条目),结果我忘记了GROUP BY声明。我已经编辑了问题。 -
啊,好吧。这更有意义。我想也许 MySQL 正在拉一些我不知道的恶作剧(而且我知道他们使用隐含的
GROUP语句来做到这一点,所以这并非完全不合理)。
标签: mysql node.js sequelize.js