#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'});