Как связать таблицы в sequelize - PullRequest
0 голосов
/ 14 января 2019

У меня есть эта функция, которая должна будет запрашивать 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, который не существует (и выдает ошибку). Как мне указать, какое поле использовать при присоединении?

1 Ответ

0 голосов
/ 14 января 2019

Хорошо, речь шла об использовании ключевого слова foreignKey, например:

models.Delegate.belongsTo(models.User, {foreignKey: 'createdBy'});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...