Le comptage des entrées associées avec Sequelize

J'ai deux tables, locations et sensors. Chaque entrée dans sensors a une clé étrangère pointant vers locations. À l'aide de Sequelize, comment puis-je obtenir toutes les entrées de locations et le nombre total d'entrées dans sensors qui sont associés à chaque entrée dans locations?

SQL brut:

SELECT 
    `locations`.*,
    COUNT(`sensors`.`id`) AS `sensorCount` 
FROM `locations` 
JOIN `sensors` ON `sensors`.`location`=`locations`.`id`;
GROUP BY `locations`.`id`;

Modèles:

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;
};
Est-ce réellement le SQL que vous voulez? Je ne pense pas que cela va faire ce que vous pensez qu'il sera. En fait, je ne suis pas sûr que la requête s'exécute sans jeter une erreur.
Je le lance et il retournés correctement toutes les lignes et les champs dans la locations tableau et pour chaque ligne le nombre d'entrées associées dans sensors.
En fait @dvlsg, il n'est pas droit. J'ai fait quelques tests supplémentaires (avec plus d'entrées dans locations table) et il s'est avéré que j'avais oublié un GROUP BY déclaration. J'ai édité la question.
Ah, d'accord. Cela fait plus de sens. J'ai pensé que peut-être que MySQL a été tirant quelques manigances, je n'étais pas au courant (et je le sais, ils le font avec les GROUP états, de sorte qu'il n'était pas tout à fait déraisonnable).
stackoverflow.com/questions/52496842/...

OriginalL'auteur MikkoP | 2016-06-14