2017-10-18 5 views
0

primaire Mon code:Sequelize tables de jointure sur la non clé

User.hasMany(UserMail, {foreignKey:'to_user_id', sourceKey:'id'}); 
User.hasMany(UserMail, {foreignKey:'from_user_id', sourceKey:'id'}); 

UserMail.belongsTo(User, {foreignKey: 'from_user_id'}) 
UserMail.belongsTo(User, {foreignKey: 'to_user_id'}) 

function getUserMail(req,res){ 
    // Authenticate 
    jwt.verify(req.headers.jwt, process.env.JWT_KEY,function(err,decoded) { 
     if (err) { 
      return res.status(401).send("Invalid token"); 
     } 
     let id = decoded.id; 

     return UserMail.findAll({ 
      where: { 
       to_user_id: id, 
       to_user_deleted: false 
      }, 
      include:{ 
       model: User, 


       //This is where the error is 
       on:{ 
        id: Sequelize.where(Sequelize.col("User.id"), "=",Sequelize.col("UserMail.from_user_id")) 
       }, 


       attributes:['username'] 
      }, 
      // attributes:[], // TODO Set what columns are needed 
      order:[['id', 'DESC']] 
     }).then(mail=> { 
      return res.status(200).send(mail); 
     }) 

    }) 
} 

Quand j'utilise que je reçois « rejet Unhandled SequelizeDatabaseError: manque entrée de gamme de la clause pour la table « Utilisateur » » et je ne suis pas sûr de ce que veux dire.

J'ai essayé d'utiliser

where:{ 
    id: UserMail.from_user_id; 
} 

Mais chaque fois que la requête est exécutée, il a « Utilisateur ». « Id » = NULL il ne retourne jamais les résultats. J'ai également essayé toutes sortes de variations pour ne pas être NULL mais aucune variable que j'ai essayée fonctionne. Je veux juste ajouter une seule colonne à la requête, nom d'utilisateur de la table Users où from_user_id dans la table UserMail se trouve dans la table Users. Cela semble si simple, mais je ne peux pas pour la vie de moi semble le faire.

Il est simple à se joindre à la table sur les clés primaires en utilisant simplement

include:{[User]} 

et comprendra où la clé primaire de l'utilisateur est égale à la clé primaire UserMail, mais ce n'est pas ce que je veux. Je le veux sur une colonne UserMail qui n'est pas la clé primaire.

Répondre

0

{sourceKey: 'id'}: UserMail.id sera ajouté à l'utilisateur en tant que contenu de la colonne de clé étrangère. Remplacez sourceKey par la colonne de votre choix.