Ошибка в ассоциативных таблицах в sequlelize с узлом

я пытаюсь соединить таблицы в узле sequenceize.try, чтобы получить данные из этих двух таблиц, но они не работают должным образом, я думаю, что некоторые проблемы в моем коде, пожалуйста, помогите мне решить эти проблемы с помощью линукс минт. через несколько дней началось продолжение узла. Теперь с использованием базы данных postgres

emploee table
const Sequelize = require("sequelize");
const db = require("../config/database");
const dataType = db.sequelize;
const Employee = dataType.define("employee", {
  id: {
    type: Sequelize.INTEGER,
    primaryKey: true,
    autoIncrement: true
  },
  username: {
    type: Sequelize.STRING,
  },
  password: {
    type: Sequelize.STRING
  },
  employeename:{
    type:Sequelize.STRING
  },
});
module.exports = Employee;

пользовательская таблица

const Sequelize = require("sequelize"); //use sequelize
 const db=require("../config/database"); //connect sequelize 
const dataType = db.sequelize;
const User = dataType.define("user",{  //table name
   id:{
       type:Sequelize.INTEGER,     //crete columns
       autoIncrement:true,
       primaryKey:true
   },
   username:{
        type:Sequelize.STRING
   },
   email:{
       type:Sequelize.STRING
   }

});
module.exports = User;    //export table 

сервис.js

 exports.views= req =>{
    console.info("enterd get service",req.body);
    return User.findAll({
      include:[
        {
          model:Employee
        }
      ]
    }).then(User =>{
      console.info("user data is = ",User);
      const resobj= User.map(user=>{
        return Object.assign(
          {},
          {
            email:User.email,
            sarath:user.sarath.map(Employee=>{
              return Object.assign(
                {},
                {


                  username:Employee.username,
                  employeename:Employee.employeename,
                }
              )
            })

          }
        )
      });
      return resobj;

    }).catch(err=>{
      return console.info("ERR IS",err);
    });

  };

продолжать

const Sequelize = require("sequelize");
// const Op = Sequelize.Op;
const Op=Sequelize.Op;
const sequelize = new Sequelize(
  "postgres", //db name
  "postgres", //username
  "postgres", //password

  {
    host: "localhost",
    dialect: "postgres",
    // operatorsAliases: false,
    opertorsAliases:{
       $or:Op.or
    },
    pool: {
      max: 5,
      min: 0,
      require: 30000,
      idle: 1000
    },
    define: {
      freezeTableName: true
    }
  }
);
// define model/table
const models = {
  Employee: sequelize.define("../model/employee"),
  User:sequelize.define("../model/user")
};

//relations
models.Employee.hasMany(models.User);



models.Sequelize = Sequelize;
models.sequelize = sequelize;



module.exports = models;

это мой вывод кода vs

enterd get service {}
ERR IS { SequelizeEagerLoadingError: employee is not associated to user!
    at Function._getIncludedAssociation (/home/sarath/Desktop/asset/node_modules/sequelize/lib/model.js:711:13)
    at Function._validateIncludedElement (/home/sarath/Desktop/asset/node_modules/sequelize/lib/model.js:615:53)
    at options.include.options.include.map.include (/home/sarath/Desktop/asset/node_modules/sequelize/lib/model.js:511:37)
    at Array.map (<anonymous>)
    at Function._validateIncludedElements (/home/sarath/Desktop/asset/node_modules/sequelize/lib/model.js:506:39)
    at Promise.try.then.then (/home/sarath/Desktop/asset/node_modules/sequelize/lib/model.js:1711:14)
    at tryCatcher (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/util.js:16:23)
    at Promise._settlePromiseFromHandler (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/promise.js:512:31)
    at Promise._settlePromise (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/promise.js:569:18)
    at Promise._settlePromise0 (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/promise.js:614:10)
    at Promise._settlePromises (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/promise.js:694:18)
    at _drainQueueStep (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/async.js:138:12)
    at _drainQueue (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/async.js:131:9)
    at Async._drainQueues (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/async.js:147:5)
    at Immediate.Async.drainQueues [as _onImmediate] (/home/sarath/Desktop/asset/node_modules/bluebird/js/release/async.js:17:14)
    at processImmediate (timers.js:632:19) name: 'SequelizeEagerLoadingError' }
GET /abc/users 200 20.215 ms - 57
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
1
0
80
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

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

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

Может что-то в духе

module.exports = function (sequelize, DataTypes) {
  const Employee = sequelize.define('employee', {
      id: {
        type: Sequelize.INTEGER,
        primaryKey: true,
        autoIncrement: true
      },
      username: {
        type: Sequelize.STRING,
      },
      password: {
        type: Sequelize.STRING
      },
      employeename:{
        type:Sequelize.STRING
      },
    },
  }, {
    freezeTableName: true,
    tableName: 'employee',
  });

  Employee.associate = function (models) {
    models.Employee.hasOne(models.User, { as: 'Employee', foreignKey: 'username', sourceKey: 'username' });    
  };

  return Employee;
};

module.exports = function (sequelize, DataTypes) {
  const User = sequelize.define('user', {
       id:{
           type:Sequelize.INTEGER,     //crete columns
           autoIncrement:true,
           primaryKey:true
       },
       username:{
            type:Sequelize.STRING
       },
       email:{
           type:Sequelize.STRING
       }
    },
  }, {
    freezeTableName: true,
    tableName: 'user',
  });

  User.associate = function (models) {
    models.User.belongsTo(models.Employee, { as: 'User', foreignKey: 'username', sourceKey: 'username' });    
  };

  return User;
};

а потом где ты это сделал: нужно добавить недостающую часть

// define model/table
const models = {
  Employee: sequelize.import('../model/employee'),
  User:sequelize.import('../model/user')
};

//You were missing this
Object.keys(models).forEach((modelName) => {
  if ('associate' in models[modelName]) {
    // console.info(models[modelName]);
    models[modelName].associate(models);
  }
});

models.Sequelize = Sequelize;
models.sequelize = sequelize;

Я сомневаюсь, что вы можете скопировать и вставить это и заставить его работать без нескольких исправлений, поскольку я просто набрал его здесь и не проверял в VSCode, но это суть.

ERR IS { SequelizeEagerLoadingError: сотрудник не связан с пользователем! в Function._getIncludedAssociation

sarathlal 09.04.2019 07:24

Object.keys(models).forEach((Employee) => { if ('associate' in models[User]) { // console.info(models[modelName]); models[Employee].associate(this.User) ; } });

sarathlal 09.04.2019 13:32

}); User.associate = function (models) { models.User.belongsTo(models.Employee, { as: 'Пользователь', ForeignKey: 'имя пользователя', sourceKey: 'имя пользователя'}); }; модуль.экспорт = Пользователь; // экспорт таблицы

sarathlal 09.04.2019 13:33

Employee.associate = function (models) { models.Employee.belongsTo(models.User, { as: 'Сотрудник', ForeignKey: 'имя пользователя', sourceKey: 'имя пользователя'}); }; модуль.экспорт = Сотрудник;

sarathlal 09.04.2019 13:34

Это не сработает, вам придется пересмотреть то, что я сказал, и следовать более внимательно... у вас есть несколько отношений ownTo, а не отношения hasOne и ownTo, которые я разместил выше... Также вы не должны публиковать код в комментариях. .. Вы должны опубликовать его полностью в правильно отформатированном ответе, так вам будет легче помочь! Просто опубликуйте еще один ответ на вопрос с внесенными вами обновлениями или вернитесь и отредактируйте свой первый вопрос с внесенными вами изменениями, и я прочитаю его там.

Greg Belyea 09.04.2019 14:27

Кроме того, ваш forEach еще не выглядит правильно, вам нужно пропустить через него все свои модели, так как отношения имеют 2 стороны.

Greg Belyea 09.04.2019 14:29

часть hasOne была моей ошибкой, я говорил об этом выше кода, который я написал, но в спешке они оба были написаны как ownTo в коде, я исправил это

Greg Belyea 09.04.2019 14:47

Другие вопросы по теме