2017-10-18 96 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:失蹤子句的表項‘用戶’,」我不知道是什麼手段。

我已經嘗試使用

where:{ 
    id: UserMail.from_user_id; 
} 

但每次執行查詢時,它具有「用戶」,「ID」 = NULL所以它永遠不會返回結果。我也試過各種各樣的變化,以使它不是NULL,但沒有我試過的變量。

我只想添加一列到查詢中,用戶名從Users表中的UserMail表中的from_user_id在Users表中。這聽起來很簡單,但我不能爲我的生活似乎做到這一點。

很簡單隻要使用

include:{[User]} 

,這將包括在用戶主鍵等於UserMail主鍵加入主鍵的表,但是這不是我想要的。我希望它在不是主鍵的UserMail列上。

回答

0

{sourceKey: 'id'}:UserMail.id將作爲外鍵列的內容添加到用戶。

因此,將sourceKey更改爲您想要的列。