Упорядочивание моделей — Настройка ассоциаций при синхронизации в узле

#node.js #orm #sequelize.js #pgadmin

Вопрос:

Я пытаюсь правильно настроить свои ассоциации, чтобы они улавливали значения внешнего ключа, когда я делаю запросы на получение в Postman. По какой-то причине, когда я пытаюсь их синхронизировать, в конце в Pgadmin4 создается новый столбец вместо соответствия значению основного столбца в начале.

Я знаю, что Sequelize предназначен для выбора правильных полей для сопоставления, но, похоже, он всегда выбирает неправильные для сопоставляемых таблиц. Есть ли способ, которым я мог бы быть более конкретным, когда они инициализируются в моем файле сервера? Я ранее использовал phpMyAdmin и не имел никаких проблем, но это было без ORM.

Я знаю о нетерпеливой загрузке из документов Sequelize, и это то, что мне удалось собрать из них. Всегда ли мне нужны связи в файле сервера и модели? или я могу взять только один? Я построил свои таблицы, мои первичные данные были загружены путем правильной инициализации значений в файле сервера, однако я никогда не мог загрузить поля внешнего ключа, а инструкции include никогда не возвращались в моих запросах.

Есть ли способ указать имя столбца в обеих таблицах, чтобы связь была правильно настроена при начальной синхронизации? В ту минуту, когда у меня возникла проблема, были созданы столбцы с сгенерированными именами объединенных имен внешних ключей.

Должен ли я создавать столбец индекса в каждой из своих таблиц, чтобы этот дополнительный столбец соответствовал другим таблицам? Я не знаю, как автоматически увеличивать каждую запись, чтобы она соответствовала первичному ключу (что не позволяет использовать внешние ключи, когда я пытаюсь установить их в pgAdmin).

введите описание изображения здесь

введите описание изображения здесь

введите описание изображения здесь

Ответ №1:

Наконец-то все уладилось. Лучший способ для этого-пронумеровать каждый ключ «как» разными номерами, чтобы при выполнении вызова findAll include вы могли сразу определить проблему. Возможно, я сделал немного больше того, что должен был сделать, но это создает дополнительные данные полей, относящиеся к моим значениям внешнего ключа.

 exports.adminUserList = (req, res) => {
    console.log("usegfu")
    users.findAll({
        include: [{
            model: diveLog, as: 'userID_FK1',
        }, {
            model: userRole, as: 'userRoleID_FK1',
        }, {
            model: article, as: 'userID_FK3',
        }, {
            model: posts, as: 'userID_FK7',
        }, {
            model: photos, as: 'userID_FK5',
        }],
    })
        .then((users) => {
 

server.js — ассоциация для сопоставления моделей таблиц

 diveLog.belongsTo(userLogin, { foreignKey: "userID", as: 'userID_FK', constraints: true, onDelete: 'cascade'});
userLogin.hasMany(diveLog, { foreignKey: "userID", as: 'userID_FK1',constraints: true, onDelete: 'cascade'});

article.belongsTo(userLogin, { foreignKey: "userID", as: 'userID_FK2',constraints: true, onDelete: 'cascade'});
userLogin.hasMany(article, { foreignKey: "userID", as: 'userID_FK3',constraints: true, onDelete: 'cascade'});

photos.belongsTo(userLogin, { foreignKey: "userID", as: 'userID_FK4',constraints: true, onDelete: 'cascade'})
userLogin.hasMany(photos, { foreignKey: "userID", as: 'userID_FK5',constraints: true, onDelete: 'cascade'});

posts.belongsTo(userLogin, { foreignKey: "userID", as: 'userID_FK6',constraints: true, onDelete: 'cascade'});
userLogin.hasMany(posts, { foreignKey: "userID", as: 'userID_FK7',constraints: true, onDelete: 'cascade'});