我有兩個表,locations
和sensors
。 sensors
中的每個條目都有一個指向locations
的外鍵。使用Sequelize,如何獲得locations
中的所有條目以及sensors
中與locations
中的每個條目相關聯的條目總數?用Sequelize計算相關條目
原始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
@dvlsg我運行它,它正確地返回'locations'表中的所有行和字段,並且每行都有'sensors'中相關條目的正確數目。 – MikkoP
其實@dvlsg,這是不對的。我做了一些更多的測試(在'locations'表中有更多的條目),結果我忘記了一個「GROUP BY」語句。我編輯了這個問題。 – MikkoP