In Rails zählen kann ich eine einfache ORM-Abfrage für die Anzahl der Likes ein Modell hat durchführen:Wie eine Gruppe von Abfrage in NodeJS Sequelize
@records = Model
.select('model.*')
.select('count(likes.*) as likes_count')
.joins('LEFT JOIN likes ON model.id = likes.model_id')
.group('model.id')
Dies erzeugt die Abfrage:
SELECT models.*, count(likes.*) as likes_count
FROM "models" JOIN likes ON models.id = likes.model_id
GROUP BY models.id
in Knoten Sequelize, bei jedem Versuch, etwas ähnliches zu tun versagt:
return Model.findAll({
group: [ '"Model".id' ],
attributes: ['id', [Sequelize.fn('count', Sequelize.col('"Likes".id')), 'likes_count']],
include: [{ attributes: [], model: Like }],
});
Dadurch wird die Abfrage generiert:
SELECT
Model.id,
count(Likes.id) AS likes_count,
Likes.id AS Likes.id # Bad!
FROM Models AS Model
LEFT OUTER JOIN Likes
AS Likes
ON Model.id = Likes.model_id
GROUP BY Model.id;
, die den Fehler erzeugt:
column "Likes.id" must appear in the GROUP BY clause or be used in an aggregate function
Es Auswahl fälschlicherweise likes.id, und ich habe keine Ahnung, warum, noch wie es loszuwerden.
immer die ID eines verbundenen Modell Auswahl einer sequelize Technisierung ist, und kann nicht deaktiviert werden. Versuchen Sie likes.id zu Ihrer Gruppenklausel hinzuzufügen –
Die Antwort auf diese Frage, die von einem Mod gelöscht wurde, ist nicht Sequelize verwenden. Es erzeugt häufig ungültiges SQL, das die Abfrage stürzt (Sie hatten einen Job). Knex Query Builder ist ein viel besseres Werkzeug, das die gleiche Lichtabstraktion um Sql bietet, die Schienen tut. Sql ist schon eine gute Abstraktion, lass Sequelize es nicht schlimmer für dich machen. –
@ andy-ray welche Version von Sequelize ...? – Satyajeet