// 지역 테이블
model District {
id String @id @default(uuid())
name String
bjdongs Bjdong[]
}
// 법정동 테이블
model Bjdong {
id String @id @default(uuid())
name String
code String
district District? @relation(fields: [districtId], references: [id])
districtId String?
}
async update(data: UpdateDistrictDTO, admin: AdminDTO): Promise<District> {
const bjdongIds = data.bjdongs.map((bjdong) => bjdong.id); // id 객체 배열로 재생성
const updated = await this.prismaService.district.update({
data: {
...data,
bjdongs: {
connect: bjdongIds.map((id) => ({ id })), // bjdong 테이블에 id 와 동일한 값을 조회하여 연결
},
},
where: { id: data.id },
});
return updated;
}
해당 코드는 update
메서드로, UpdateDistrictDTO
와 AdminDTO
를 입력받아서 District
를 업데이트하는 기능을 수행합니다. 코드를 상세하게 분석해보겠습니다:
bjdongIds
변수 선언:
data.bjdongs
배열에서 각 요소의 id
값을 추출하여 bjdongIds
배열에 저장합니다.updated
변수 선언:
prismaService.district.update()
메서드를 호출하여 District
업데이트를 수행합니다.data
객체와 adminId
값을 병합하고, bjdongs
필드에 연결(connect)할 bjdong
들의 정보를 설정합니다.bjdongIds.map((id) => ({ id }))
를 통해 bjdongIds
배열의 각 id
값을 가지는 객체 배열을 생성합니다. 이 객체 배열은 bjdongs
필드의 connect
옵션에 사용됩니다.where
절을 사용하여 업데이트할 District
의 고유 식별자를 지정합니다.updated
변수 반환:
District
객체를 반환합니다.이 코드는 주어진 UpdateDistrictDTO
와 AdminDTO
를 사용하여 District
를 업데이트하고, 해당 업데이트된 District
를 반환하는 기능을 구현하고 있습니다. bjdongs
필드에 대한 연결(connect) 작업은 bjdongIds
배열의 각 id
값을 활용하여 수행됩니다.
connect
옵션은 Prisma의 연결 기능 중 하나로, 관계형 데이터베이스에서 관계를 설정할 때 사용됩니다. bjdongs
필드가 District
모델과 Bjdong
모델 간의 관계를 나타내는 필드라고 가정하겠습니다.
bjdongIds.map((id) => ({ id }))
는 bjdongIds
배열의 각 요소에 대해 객체를 생성하는 과정입니다. 각 id
값을 가지는 객체를 생성하여 배열로 반환합니다.
예를 들어, bjdongIds
배열이 [1, 2, 3]
인 경우, bjdongIds.map((id) => ({ id }))
는 다음과 같은 배열을 생성합니다:
[
{ id: 1 },
{ id: 2 },
{ id: 3 }
]
이 배열은 Prisma의 connect
옵션에 사용되며, bjdongs
필드의 연결 작업에 활용됩니다. 각 객체는 id
필드를 가지며, 해당 id
값과 일치하는 Bjdong
데이터를 District
의 bjdongs
필드와 연결(connect)합니다. 즉, bjdongs
필드에는 id
가 1, 2, 3인 Bjdong
데이터가 연결됩니다.
이를 통해 bjdongs
필드에 여러 Bjdong
데이터를 연결할 수 있으며, bjdongIds
배열의 각 id
값을 가진 객체 배열을 생성하여 connect
옵션에 전달함으로써 이 연결 작업을 수행할 수 있습니다.