model Profile {
id Int @id @default(autoincrement())
bio String
user User @relation(fields: [userId], references: [id]) ◀️ profile에 연결된 user입니다.
userId Int 외래키 ◀️(userId)입니다.
}
@relation
Database상 FOREIGN KEY/REFERENCES에 매칭되는 속성입니다.
model상 외래키로 설정 할 필드와, 다른 모델의 PRIMARY KEY를 인수로 가집니다
@relation 의 예시
https://www.prisma.io/docs/concepts/components/prisma-schema/relations 사진 참고
relation 는 프리즈마 스키마에서 두 모델 간의 연결입니다.
예를 들어, 한 사용자가 여러 블로그 게시물을 가질 수 있기 때문에 User 와 Post 사이에는 일대다 관계가 있습니다.
-----------------------------------------------------
model User {
id Int @id @default(autoincrement())
posts Post[]
}
-----------------------------------------------------
model Post {
id Int @id @default(autoincrement())
author User @relation(fields: [authorId], references: [id])
authorId Int // relation scalar field (used in the `@relation` attribute above)
}
-----------------------------------------------------
Two relation fields:
author and posts.
Relation fields define connections between models at the Prisma level and do not exist in the database. These fields are used to generate the Prisma Client.
< 뭔소리.... 내가 그냥 해석한다 >
관계 필드들은 프리즈마 레벨에서 모델 사이의 연결을 정의한다. db 에는 존재하지 않는다.
이 필드들은 프리즈마 클라이언트를 생성하는데 사용된다.
<프리즈마 클라이언트의 관계>
프리즈마 클라이언트는 프리즈마 스키마에서 생성됩니다.
다음 예는 프리즈마 클라이언트를 사용하여 레코드를 가져오고 생성하고 업데이트할 때 관계가 어떻게 나타나는지 보여줍니다.
1. 다음 쿼리는 user 레코드와 두개의 연결된 post 레코드들을 만듭니다.
const userAndPosts = await prisma.user.create({
data: {
posts: {
create: [
{ title: 'Prisma Day 2020' }, // Populates authorId with user's id
{ title: 'How to write a Prisma schema' }, // Populates authorId with user's id
],
},
},
2.
다음 쿼리는 id가 20인 자동으로 generated 된 user 만들기
두개의 새로운 post 레코드들을 만들고, authorId 가 20 인 것을 정의.
const getAuthor = await prisma.user.findUnique({
where: {
id: "20",
},
include: {
posts: true, // All posts where authorId == 20
},
});
외래키 정의
주문 테이블에서 사용자 아이디 정보를 활용해 사용자의 테이블의 정보를 찾을 수 있게 되었습니다.
바로, 주문 테이블에서 존재하는 사용자 아이디 정보(기본키) 를 우리는 외래키라고 부릅니다.
yarn codegen
목적:
graphQL Code Generator 를 도입하여 클라이언트의 생산성을 높이고 유지보수를 쉽게 한다.
문제:
클라이언트 서비스는 모두 타입스크립트를 사용해서 그래프큐엘 스키마에 대응되는 타입 또는 interface 를 선언하여 사용하고 있었다.
이때 그래프큐엘 스키마의 변경 또는 추가가 발생할 경우 클라이언트의 모든 서비스들은 type 또는 interface 를 재정의하거나 새롭게 정의해야 하는 문제가 있었다.
실습:
# 1. 작업 디렉터리 생성
$ mkdir graphql-code-gen-sample
$ cd graphql-code-gen-sample
# 2. 의존성 패키지 설치
$ yarn add grapqhl
$ yarn add -D @graphql-codegen-cli
# 3. 초기화 마법사 시작 (해당하는 설정 선택)
$ yarn graphql-codegen init
# 4. 설정이 완료되면 선택한 항목의 패키지를 설치한다.
$ yarn install
# 5. 설정할때 입력한 스크립트 실행명령어를 사용하여 generator
$ yarn gen # gen의 경우 사용자의 선택에 따라 달라진다
codegen.yml 참고
https://ithub.tistory.com/354#recentEntries
'👩🏻💻 TIL' 카테고리의 다른 글
Express / middleware / router (0) | 2022.03.17 |
---|---|
JavaScript / TypeScript fundamental (0) | 2022.03.16 |
2022_02_09_TIL (0) | 2022.02.10 |
기업협업에서 배운 것 정리 (0) | 2022.01.17 |
GraphQL (0) | 2022.01.04 |