[create, update]
record를 create하거나 update 할 때 들어갈 key와 value의 기입할 때 사용
const result = await client.product.create({
data: {
name : "",
price: 12,
description: "",
imgae: "",
},
});
[read]
검색하고자 하는 컬럼을 지정하고자 할 때 사용
// 특정 컬럼에 구분짓지 않고, 모든 product을 조회하겠다.
// "where이 없으면 모든 대상에서 조회하겠다" 라는 의미
const result = await client.product.findMany({});
// product의 컬럼 중에 id가 2인 모든 것을 조회하겠다.
const result = await client.product.findMany({
where: {
id: 2
}
});
// product의 컬럼 중에 name이 '갤럭시'이고, price가 123 인 것을 모두 조회하겠다.
const result = await client.product.findMany({
where: {
name: '갤럭시',
price: 123,
}
});
gte: X
: X 보다 크거나 같은 것을 가져옴gt : Y
: Y보다 큰 것을 가져옴 lte: X
: X 보다 작거나 같은 것을 가져옴lt : Y
: Y보다 작은 것을 가져옴 const posts = await client.post.findMany({
//.. 중략
where: {
latitude: {
gte: parsedLatitude - 0.01,
lte: parsedLatitude + 0.01,
},
longitude: {
gte: parsedLongitude - 0.01,
lte: parsedLongitude + 0.01,
}
}
});
[read]
where에서 선택한 데이터 중에서 특정 key값만 추출하고자 할 때 사용
const result = await client.product.findMany({
where: {
id: 2,
},
select: {
name: true,
price: true,
}
});
// { name: "", price: "" }
[create, update]
create 또는 update를 할 때만 사용 가능하며, 목적은 레코드를 추가할 때 @relation 관계에 있는 table의 어떠한 값과 연결시킬 것인지 지정하고자 할 때 사용한다. 아래 코드에서는 product을 추가할 때, 해당 product의 user, user 중에서 id가 어떤 것인지 지정한다. 이것을 사용하려면 양쪽의 field가 @relation으로 연결되어 있어야 한다.
const result = await client.product.create({
data: {
name : "",
price: 12,
description: "",
imgae: "",
user: {
connect: {
id: 18,
}
}
},
});
생성된 것을 조회하면, connect에서 연결했던 userId: 18
이 정보로 포함되어 있는 것을 확인 할 수 있다. 단순히 userId 18 뿐만 아니라, user의 전체 정보를 조회 할 수 있다.
[
{
id: 7,
createdAt: 2022-03-20T14:24:13.100Z,
updatedAt: 2022-03-20T14:24:13.101Z,
userId: 18,
image: 'xxx',
name: '',
price: 12,
description: '12',
user: {
id: 18,
phone: null,
email: 'rem9238@kakao.com',
name: 'Anonymous',
avatar: null,
createdAt: 2022-03-01T07:04:26.393Z,
updatedAt: 2022-03-01T07:04:26.395Z
}
}
]
[read]
관계를 이루고 있는 필드를 현재 조회한 쿼리에 포함시킬 때 사용
const result = await client.product.findMany({
where: {
id: 2,
},
include: {
user: true,
}
});
조회 결과 : user와 product은 schema에서 @relation 되어 있음
[
{
id: 2,
createdAt: 2022-03-13T10:46:04.141Z,
updatedAt: 2022-03-20T12:48:06.522Z,
userId: 19,
image: 'xxx',
name: '갤럭시',
price: 123,
description: '이것은 첫번째',
user: {
id: 19,
phone: '01099025911',
email: null,
name: 'Anonymous',
avatar: null,
createdAt: 2022-03-02T15:06:12.018Z,
updatedAt: 2022-03-02T15:06:12.019Z
}
}
]
+select와 함께 사용하기
const result = await client.product.findMany({
where: {
id: 2,
},
include: {
user: {
select: {
name: true,
id: true,
}
}
}
});
조회 결과
[
{
id: 2,
createdAt: 2022-03-13T10:46:04.141Z,
updatedAt: 2022-03-20T12:48:06.522Z,
userId: 19,
image: 'xxx',
name: '갤럭시',
price: 123,
description: '이것은 첫번째',
user: { id: 19, name: 'Anonymous' }
}
]
그리고 _count
를 통해 relation을 통해 [ ]로 받아오는 컬럼의 값의 수를 response 할 수 있다. 클론 코딩에서는 post가 가지고 있는 answer
와 wonderings
의 갯수를 가져오도록 했다. answer
는 post의 댓글의 갯수이고, wonderings
는 '궁금해요' 라는 기능의 갯수이다.
const post = await client.post.findUnique({
where: {
id: +id.toString(),
},
include: {
user: {
select: {
id: true,
name: true,
avatar: true,
},
},
_count: { // include안에 들어가고, 가져오고 싶은 컬럼을 select해서 가져온다.
select: {
answers: true,
wonderings: true,
},
},
},
});
고유 id 에 의해 기존 레코드를 연결하거나 또는 레코드가 존재하지 않으면, 레코드를 새로 생성할 때 사용한다.
// user : { phone: phone } 또는 { email: email } ==> phone과 email 모두 `@unique`
const token = await client.token.create({
data: {
payload, // token number
// token의 user 정보는 where 정보를 조회 했을 때
// 이미 있으면, connect 하고
// 없으면, { name: '', ...user } 로 user를 생성한다.
// token 생성 쿼리에서 user를 생성할 수도 있다.
user: {
connectOrCreate: {
where: {
...user,
},
create: {
name: "Anonymous",
...user,
},
},
},
},
});
prisma 처음 사용하면서 많이 애먹었는데 큰 도움이 됐습니다 감사합니다