Sequelize 관계 쿼리
2023. 7. 9. 20:54ㆍORM/Sequelize
include
우리가 SQL 에서 관계 있는 테이블을 불러올 때는 JOIN 을 사용하여 원하는 데아터를 가지고 왔다. 시퀄라이즈에서는 include 를 사용한다.
관계가 있는 모델을 include 에 배열을 넣어주면 된다.
→ 배열인 이유는 다양한 모델과 관계가 있을 수 있기 때문
const findPosts = await Posts.findAll({
// 컬럼 나열
attributes: ['postId', 'userId', 'title', 'createdAt', 'updatedAt'],
include: [
{
model: Users, // posts에 없는 컬럼을 join을 통해 가져오기
attributes: ['nickname'], // nickname 가져오기
},
],
order: [['createdAt', 'DESC']], // 생성순으로 정렬
});
include 를 사용하면 기본적으로 Inner join 으로 되며, left outher join 으로 사용하고 싶은 경우, required:false 옵션을 주어야 한다.
Shop.findAll({
where: {id:shopId},
include: [{
model: ShopAd,
as: 'ads',
where: { is_valid: 1, is_vertify: 1 },
required: false // left outer join이 되게 한다.
}]
})
join 속성
include 나 관계 쿼리 메서드에도 where 나 attributes 같은 옵션들을 사용할 수 있다.
아래는 id 가 1인 댓글만 가져오고, 그 중에서도 id 컬럼만 가져오도록 하고 있다.
const user = await User.findOne({
include: [{ // left outer join
model: Comment, // join할 모델
attributes: ['id'], // select해서 표시할 필드 지정
where: {
id: 1, // on Comment.id = 1
},
}]
});
// 또는
const comments = await user.getComments({ // user가 comments를 get한다. (user와 comments는 관계되어 있다.)
attributes: ['id'], // select해서 표시할 필드 지정
where: {
id: 1, // on Comment.id = 1
},
});
'ORM > Sequelize' 카테고리의 다른 글
Sequelize CRUD 쿼리 (0) | 2023.07.09 |
---|---|
Sequelize 관계 정의하기 (0) | 2023.07.09 |
Sequelize Model (0) | 2023.07.09 |
Sequelize Migration (0) | 2023.07.09 |
Sequelize 라이브러리 구성 (0) | 2023.07.09 |