테이블과 필드 설정
LEFT JOIN Users as hosts ON Post.hostId = hosts.id
,EFT JOIN Users as guests ON Post.guestId = guests.id
구현하려는 내용
시도한 방법
User 테이블을 두번 join 시킨 다음 새롭게 생성된 테이블에서 [Op.or]
로 다음과 같이 닉네임을 조건을 만드려고 했다.
where: {
[Op.or]: [
{
hostNickname: {
[Op.substring]: nickname,
},
guestNickname: {
[Op.substring]: nickname,
},
},
],
},
그 결과, 다음과 같은 에러가 발생했다. 에러에서는 Post테이블에는 hostNickname과 guestNickname이라는 필드가 존재하지 않는다고 설명한다.
두번의 조인을 통해 새롭게 만들어진 테이블에 hostNickname과 guestNickname이라는 필드가 있는 것이지, 기존의 Post 테이블에는 두개의 필드가 없는 것이다.
두번의 조인을 할때, 각각 hosts(Post.hostId와 조인한 User 테이블의 별칭)와 guests(Post.guestId와 조인한 User 테이블의 별칭)라는 별칭을 사용했는데, where 조건에서 이 별칭을 사용해서 구분해주었다.
where: {
[Op.or]: [
{
[`$guests.nickname$`]: {
[Op.substring]: nickname, //여기서 Op.substring은 "%"+nickname+"%"와 같은 기능
},
},
{
[`$hosts.nickname$`]: {
[Op.substring]: nickname,
},
},
],
},
reference