Partage
  • Partager sur Facebook
  • Partager sur Twitter

[SEQUELIZE] Associations

    2 juin 2022 à 15:39:52

    Bonjour à tous,

    Je suis en plein apprentissage de l'ORM sequelize, et je rencontre un problème que je n'arrive pas à résoudre malgré mes recherches sur internet.

    En effet, j'essaye d'associer deux modèles (Client et Installation), lorsque j'utilise la méthode "include" dans "findAll",  cela me renvoie une erreur en disant que Installation n'est pas associé à Client.

    modèle Client :

    export default (sequelize, DataTypes) => {
     var Client = sequelize.define(
        "Client", {
          id: {
            type: DataTypes.INTEGER,
            allowNull : false,
            primaryKey: true,
            autoIncrement: true,
          },
          nom: {
            type: DataTypes.STRING,
            allowNull: false,
          },
          prenom: {
            type: DataTypes.STRING,
            allowNull: false,
          },
          adresse_facturation: {
            type: DataTypes.STRING,
            allowNull: false,
          },
          telephone: {
            type: DataTypes.STRING,
            allowNull: false,
          },
        },
        {
          sequelize,
          timestamps: true,
          createdAt: "created",
          updatedAt: false,
        }
      );
    
      Client.associate = (models) => {
        Client.hasMany(models.Installation);
      }
    
      return Client;
    };
    

    modèle Installation : 

    export default (sequelize, DataTypes) => {
        const Installation = sequelize.define('Installation', {
          id: {
            type: DataTypes.INTEGER,
            allowNull : false,
            primaryKey: true,
            autoIncrement: true,
          },
          clientId: {
            type: DataTypes.INTEGER,
            references: {
              model: 'Clients',
              key: 'id', 
            }
          },
          type_chaudiere: {
            type: DataTypes.STRING,
            allowNull: false
          },
          adresse_intervention: {
            type: DataTypes.STRING,
            allowNull: false
          }
        }, {
          sequelize,
          timestamps: true,
          createdAt: 'created',
          updatedAt: false,
        })
    
        Installation.associate = (models) => {
          Installation.belongsTo(models.Client);
        }
    
        return Installation;
      };
    



    Controller client :

    //#region impots 
    import Client from '../Models/Client.js';
    import { DataTypes} from 'sequelize';
    import sequelize from '../DAL/posgresql.js';
    import Installation from '../Models/Installation.js';
    //#endregion
    
    //connection to the db
    sequelize;
    
    const client = Client(sequelize, DataTypes);
    const installation = Installation(sequelize, DataTypes);
    
    sequelize.sync()
    .then()
    .catch(error => console.log('error :', error));
    
    export default  {
    
        getAll : async function(req, res) {
            try {
              const clients = await client.findAll({include : [{as: 'Installations', model : installation}]});
              res.status(200).send(clients);
            } catch(err) {
                console.log(err);
                res.status(500).send({error : err });
            }
        }
        
    };



    et pour finir l'erreur :

    EagerLoadingError [SequelizeEagerLoadingError]: Installation is not associated to Client!
        at Function._getIncludedAssociation (D:\backend\node_modules\sequelize\lib\model.js:565:13)
        at Function._validateIncludedElement (D:\backend\node_modules\sequelize\lib\model.js:502:53)
        at D:\backend\node_modules\sequelize\lib\model.js:421:37
        at Array.map (<anonymous>)
        at Function._validateIncludedElements (D:\backend\node_modules\sequelize\lib\model.js:417:39)
        at Function.findAll (D:\backend\node_modules\sequelize\lib\model.js:1103:12)
        at processTicksAndRejections (node:internal/process/task_queues:96:5)
        at async getAll (file:///D:/backend/src/Controller/client.js:22:27)


    Si quelqu'un a une idée de comment débloquer cette situation, je suis preneur.

    Merci d'avance.

    • Partager sur Facebook
    • Partager sur Twitter
      13 juin 2022 à 10:07:08

      Il me semble que le problème vienne de ton fichier src/Controller/client.js, à la ligne 22, mais je ne suis pas certain de comment faire pour le corriger. Peut-être faut-il mettre un i majuscule (I) à model: installation, à la toute fin de ta ligne, puisque dans ton fichier Models/Client.js, c'est à un modèle Installation, et non pas installation que tu le lies. Mais je suis pas sûr que ça résole le problème.

      En tou cas, la ligne suivante à la fin de l'erreur me fait dire que ce serait à la ligne 22 de ton fichier controller...

      at async getAll (file:///D:/backend/src/Controller/client.js:22:27)



      • Partager sur Facebook
      • Partager sur Twitter

      [SEQUELIZE] Associations

      × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
      × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
      • Editeur
      • Markdown