2017-10-18 14 views
0

私のコードのテーブルを結合:Sequelizeは、非プライマリキー

私は私が得ることを使用
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); 
     }) 

    }) 
} 

:「ユーザー 『未処理の拒絶SequelizeDatabaseErrorをテーブルのFROM句エントリを行方不明』」と私はどのようなものかわかりません手段。

私が使用して試した

where:{ 
    id: UserMail.from_user_id; 
} 

しかし、それは結果を返すことはありませんので、クエリが実行されるたびに、それは「ユーザー」。「ID」= NULLを持っています。私はまた、NULLにならないようにするためにあらゆる種類のバリエーションを試しましたが、私が試した変数はありません。

UserMailテーブルのfrom_user_idがUsersテーブルにあるUsersテーブルのusernameというクエリに1つの列を追加するだけです。それはとてもシンプルに聞こえるが、私の人生はそれをするように見えることはできない。

それはちょうど

include:{[User]} 

を使用してユーザーのプライマリキーはUserMail主キーに等しいことが含まれることにより、主キーのテーブルを結合するために簡単ですが、それは私が欲しいものではありません。プライマリキーではないUserMailカラムにその値を設定します。

答えて

0

{sourceKey: 'id'}:UserMail.idがUserに外部キー列のコンテンツとして追加されます。

sourceKeyを希望の列に変更してください。

関連する問題