Модель A не связана с ошибкой продолжения модели B - PullRequest
0 голосов
/ 14 февраля 2020

У меня есть следующая проблема, у меня есть 2 модели: Клиент

module.exports = (sequelize, DataTypes) => {
const Client = sequelize.define('Client', {      
  first_name: DataTypes.STRING,
  last_name: DataTypes.STRING,
  phone: DataTypes.STRING,
  mobile_phone: DataTypes.STRING,
  email: DataTypes.STRING,                             
});

//creating association Client with Gender
Client.associate = function (models) {
  Client.hasOne(models.Gender, {     
       //     
  });
};


return Client; }

и Пол:

module.exports = (sequelize, DataTypes) => {
const Gender = sequelize.define('Gender', {      
  name: DataTypes.STRING,                             
});

//creating association Gender with Employee
Gender.associate = function (models) {
  models.Gender.hasMany(models.Employee, {   
    //                         
  });
};

//creating association Gender with Client
Gender.associate = function (models) {
  models.Gender.belongsTo(models.Client, { 
    foreignKey: 'gender_id'                   
  });
};

return Gender; }

Мой ClientController:

const { Client, Gender } = require('../models');

class ClientController {

  // Apresenta todos os resgistros do determinado Model
  async index (req, res) {
      const clients = await Client.findAll({});

      return res.status(200).json({
          status: 'ok',
          clients
      });
  }

  // Apresenta os atributos setados de um resgistro específico
  async show (req, res) {
      const client = await Client.findAll({
          attributes: ['id', 'first_name', 'last_name', 'phone', 'mobile_phone', 'email'],
          where: {
              id: req.params.id
          },
          include: [{
              model: Gender,                 
              attributes: [],

          }],
      });

      return res.status(200).json({
          status: 'ok',
          client
      });
  }

  // Cria e salva um resgistro do Model especificado
  async store (req, res) {
      const client = await Client.create(req.body);

      return res.status(201).json({
          status: 'created',
          client
      });
  }

  // Edita e salva um resgistro do Model especificado
  async update (req, res) {
      const { first_name, last_name, phone, mobile_phone, email } = req.body;

      const client = await Client.update({
          first_name: first_name,
          last_name: last_name,
          phone: phone,
          mobile_phone: mobile_phone,
          email: email

      }, {
          where: {
              id: req.params.id
          }
      });

      return res.status(200).json({
          status: 'updated',
          client
      });
  }

  // Exclui um resgistro do Model especificado
  async destroy (req, res) {
      await Client.destroy({
          where: {
              id: req.params.id
          }
      });

      return res.status(204).json({
          status: 'removed'
      });
  }
}

module.exports = new ClientController()

Но мне возвращается следующее:

узел ./bin/www*1013*

api: сервер прослушивает порт 3000 + 0ms (узел: 16328) UnhandledPromiseRejectionWarning: SequelizeEagerLoadingError: Пол не связан с клиентом! в Function._getIncludedAssociation (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ sequelize \ lib \ model. js: 715: 13) в Function._validateIncludedElement (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ sequelize \ lib \ model. js: 619: 53) по адресу options.include.options.include.map.include (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ sequelize \ lib \ модель. js: 516: 37) в Array.map () в Function._validateIncludedElements (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ sequelize \ lib \ model. js: 511: 39) в Promise.try.then.then (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ sequelize \ lib \ model. js: 1726: 14) в tryCatcher (C: \ SISTEMA-REACT- EXPRESS \ api \ node_modules \ bluebird \ js \ release \ util. js: 16: 23) в Promise._settlePromiseFromHandler (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ bluebird \ js \ release \ обещание. js: 547: 31) в Promise._settlePromise (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ bluebird \ js \ release \ обещания. js: 604: 18) в Promise._settlePromise0 (C: \ SIS TEMA-REACT-EXPRESS \ api \ node_modules \ bluebird \ js \ release \ обещания. js: 649: 10) в Promise._settlePromises (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ bluebird \ js \ выпуск \ обещание. js: 729: 18) в _drainQueueStep (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ bluebird \ js \ release \ asyn c. js: 93: 12) в _drainQueue (C: \ SISTEMA-REACT-EXPRESS \ api \ node_modules \ bluebird \ js \ release \ asyn c. js: 86: 9) в Asyn c ._ сливныхQueues (C: \ SISTEMA -REACT-EXPRESS \ api \ node_modules \ bluebird \ js \ release \ asyn c. js: 102: 5) в Immediate.Asyn c .drainQueues [как _onImmediate] (C: \ SISTEMA-REACT -EXPRESS \ api \ node_modules \ bluebird \ js \ release \ asyn c. js: 15: 14) в runCallback (таймеры. js: 705: 18) в tryOnImmediate (таймеры. js: 676: 5) at processImmediate (таймеры. js: 658: 5) (узел: 16328) UnhandledPromiseRejectionWarning: необработанное отклонение обещания. Эта ошибка возникла либо из-за того, что внутри asyn c -функции не было блока catch, либо из-за отклонения обещания, которое не было обработано с помощью .catch (). (идентификатор отклонения: 1) (узел: 16328) [DEP0018] Предупреждение об устаревании: отклонения необработанного обещания устарели. В будущем отклонения обещаний, которые не обрабатываются, завершат процесс Node.js с ненулевым кодом выхода.

Obs: В n: m отношениях с сводной таблицей все нормально, кто-то может мне помочь

1 Ответ

1 голос
/ 14 февраля 2020

Вы перезаписываете свою первую ассоциацию второй:

//creating association Gender with Employee
Gender.associate = function (models) {
  models.Gender.hasMany(models.Employee, {   
    //                         
  });
};

//creating association Gender with Client
Gender.associate = function (models) {
  models.Gender.belongsTo(models.Client, { 
    foreignKey: 'gender_id'                   
  });
};

, просто объединяйте их в одну:

//creating Gender associations
Gender.associate = function (models) {
  models.Gender.hasMany(models.Employee, {   
  models.Gender.belongsTo(models.Client, { 
    foreignKey: 'gender_id'                   
  });
};
...