В Rails я могу выполнить простой запрос ORM для числа Likes, которое имеет модель:
@records = Model
.select( 'model.*' )
.select( 'count(likes.*) as likes_count' )
.joins( 'LEFT JOIN likes ON model.id = likes.model_id' )
.group( 'model.id' )
Это порождает запрос:
SELECT models.*, count(likes.*) as likes_count
FROM "models" JOIN likes ON models.id = likes.model_id
GROUP BY models.id
В Node Sequelize любая попытка выполнить что-то подобное не выполняется:
return Model.findAll({
group: [ '"Model".id' ],
attributes: ['id', [Sequelize.fn('count', Sequelize.col('"Likes".id')), 'likes_count']],
include: [{ attributes: [], model: Like }],
});
Это порождает запрос:
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;
Что порождает ошибку:
column "Likes.id" must appear in the GROUP BY clause or be used in an aggregate function
Он ошибочно выбирает like.id, и я понятия не имею, почему и как избавиться от него.