W Rails mogę wykonywać proste zapytanie ORM dla liczby lubi model:Jak policzyć grupy przez kwerendę w 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')
ten generuje zapytanie:
SELECT models.*, count(likes.*) as likes_count
FROM "models" JOIN likes ON models.id = likes.model_id
GROUP BY models.id
w Węźle Sequelize każda próba zrobienia czegoś podobnego nie:
return Model.findAll({
group: [ '"Model".id' ],
attributes: ['id', [Sequelize.fn('count', Sequelize.col('"Likes".id')), 'likes_count']],
include: [{ attributes: [], model: Like }],
});
ten generuje zapytanie:
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;
który generuje błąd:
column "Likes.id" must appear in the GROUP BY clause or be used in an aggregate function
To błędnie wybierając likes.id, i nie mam pojęcia dlaczego, ani jak się go pozbyć.
Zawsze wybierając identyfikator połączonego modelu, jest to kolejność techniczna i nie można go wyłączyć. Spróbuj dodać likes.id do klauzuli grupowej. –
Odpowiedź na to pytanie, która została usunięta przez mod, nie obejmuje Sequelize. Często generuje nieprawidłowy kod SQL, który powoduje zawieszenie zapytania (masz jedno zadanie). Kreator zapytań Knex jest znacznie lepszym narzędziem, które oferuje taką samą abstrakcję światła wokół sql, co robi szyny. Sql jest już dobrą abstrakcją, nie pozwól, aby Sequelize pogorszyło się dla ciebie. –
@ andy-ray której wersji sequelize ...? – Satyajeet