У меня есть эта функция, которая должна будет запрашивать 3 разных таблицы.
Таблицы следующие:
DelegateUserLink
id
DelegateId (int)
UserId (int)
Delegate
id (int)
createdBy (int)
User
id (int)
name (varchar)
Я начал с создания ассоциации следующим образом:
models.DelegateUserLink.belongsTo(models.Delegate);
models.Delegate.belongsTo(models.User, {through: models.Delegate.createdBy});
Я запускаю запрос, который выглядит следующим образом:
return models.DelegateUserLink.findAll({
where: { UserId: id }
,include: {model: models.Delegate,attributes: ['createdBy'],include: {model: models.User,attributes: []}}
}).then(function(rs) {
rs.forEach(function(result) {
console.log("result:",result);
});
return rs;
});
Выполнение этого запроса дает эту ошибку:
SequelizeDatabaseError: column Delegate.UserId does not exist
И, глядя на сгенерированный запрос, я вижу это:
SELECT "DelegateUserLink"."createdAt", "DelegateUserLink"."updatedAt", "DelegateUserLink"."DelegateId", "DelegateUserLink"."UserId", "Delegate"."id" AS "Delegate.id", "Delegate"."createdBy" AS "Delegate.createdBy" FROM "DelegateUserLinks" AS "DelegateUserLink" LEFT OUTER JOIN "Delegates" AS "Delegate" ON "DelegateUserLink"."DelegateId" = "Delegate"."id" LEFT OUTER JOIN "Users" AS "Delegate->User" ON "Delegate"."UserId" = "Delegate->User"."id" WHERE "DelegateUserLink"."UserId" = 677;
Моя идея состояла в том, чтобы сказать sequelize, какое поле использовать при объединении таблиц Delegate
и User
, используя эту строку
models.Delegate.belongsTo(models.User, {through: models.Delegate.createdBy});
Где я указал "через", в какое поле должно быть выполнено соединение. Но, видимо, я не прав. Потому что он пытается использовать Delegate.UserId
, который не существует (и выдает ошибку). Как мне указать, какое поле использовать при присоединении?