2017-10-18 6 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에 하나의 열만 추가하면됩니다. 너무 단순하게 들리지만, 저의 삶은 그것을 할 수없는 것 같습니다.

그냥

include:{[User]} 

를 사용하여 사용자 기본 키가 USERMAIL 기본 키와 동일한 곳을 포함하여 기본 키에 테이블을 조인하는 간단하지만 내가 원하는 게 아니에요. 기본 키가 아닌 UserMail 열에서이 키를 원합니다.

답변

0

{sourceKey: 'id'} : UserMail.id가 User에 외부 키 열의 콘텐츠로 추가됩니다.

그래서 sourceKey을 원하는 열로 변경하십시오.