Prisma에서는 모델 정의를 통해 데이터베이스 테이블의 구조를 정의
각 모델은 데이터베이스 테이블의 열과 일치하는 속성을 가짐
<예시>
model Category {
categoryId Int @id @default(autoincrement())
name String
order Int
@@map("Categories")
}
prisma.categories.count()
: 레코드 수const category = await prisma.categories.create({
data: {
name,
order: (await prisma.categories.count()) + 1, // 현재 카테고리의 개수 + 1을 order 값으로 사용
}, // 현재까지 데이터베이스에 저장된 카테고리의 개수를 반환
});
-` select : { }`
조회된 결과에서 특정 필드를 선택하여 반환하도록 지정
````js
const category = await prisma.categories.findFirst({
where: { name: 'SomeCategory' },
select: { categoryId: true, name: true, order: true },
});
데이터베이스의 여러가지 필드중 id, name, order 만 반환함
const categories = await prisma.categories.findMany({
// order를 기준으로 정렬
orderBy: { order: 'desc' }, // 'desc'는 내림차순
````
```
: prisma.모델이름.매서드(옵션들)
findFirst()` : 첫번째로 일치하는 하나
findMany: 데이터베이스에서 여러 개의 결과를 반환
findUnique: 데이터베이스에서 고유한 결과를 반환
findById : 프리즈마에서는 No존재
ID를 찾을때는 findUnique 사용함
findCount : 데이터베이스에서 일치하는 레코드의 수를 반환
findManyBy : 특정 필드의 값을 기반으로 여러 개의 결과를 반환 , 주어진 조건에 맞는 모든 레코드를 반환
findFirstBy : 특정 필드의 값을 기반으로 첫 번째 결과를 반환, 일치하는 레코드가 없는 경우 null을 반환
(1) findFirst :
데이터베이스에서 첫 번째 일치하는 레코드를 반환
그러나 일치하는 레코드가 없을 경우에는 null을 반환
주로 데이터베이스에서 일치하는 레코드를 찾을 때 사용되며, 일반적으로 일부 레코드만 필요한 경우에 유용
(2) findUnique
주어진 고유 식별자(unique identifier)에 해당하는 단일 레코드를 반환
고유 식별자에 해당하는 레코드가 없으면 오류가 발생
일반적으로 주요 키(primary key)나 고유한 인덱스(unique index)와 관련된 레코드를 검색할 때 사용
const user = await prisma.user.findFirst({
where: {
age: { greaterThan: 18 }, // 나이가 18보다 큰 사용자
role: 'admin', // 역할이 'admin'인 사용자
},
select: {
id: true, // id 필드를 반환
name: true, // name 필드를 반환
email: true, // email 필드를 반환
},
});
console.log(user);
- where 조건절 안에 객체 형태로 있는데 그안에 조건이 들어가면 또 { } 로
````
````
const newUser = await prisma.user.create({
data: {
name: 'John',
email: 'john@example.com',
age: 30,
},
});
const updatedUser = await prisma.user.update({
where: { id: 1 },
data: { name: 'Updated Name' },
});
const deletedUser = await prisma.user.delete({
where: { id: 1 },
});
const upsertedUser = await prisma.user.upsert({
where: { email: 'new@example.com' },
create: {
name: 'New User',
email: 'new@example.com',
age: 25,
},
update: { name: 'Updated User' },
});
const newUsers = await prisma.user.createMany({
data: [
{ name: 'User 1', email: 'user1@example.com', age: 30 },
{ name: 'User 2', email: 'user2@example.com', age: 25 },
{ name: 'User 3', email: 'user3@example.com', age: 35 },
],
});
where: 검색 조건을 지정합니다. 특정 필드에 대한 값을 기준으로 데이터를 필터링할 수 있습니다.
orderBy: 검색 결과를 정렬합니다. 필드와 정렬 방향을 지정할 수 있습니다.
select: 반환할 필드를 선택합니다. 필요한 필드만 선택하여 성능을 향상시킬 수 있습니다.
include: 관계된 테이블의 데이터를 가져올 때 사용합니다. 관계된 엔터티의 데이터를 함께 가져올 수 있습니다.
take: 반환할 최대 레코드 수를 지정합니다. 일반적으로 페이징에 사용됩니다.
skip: 결과에서 건너뛸 레코드 수를 지정합니다. 레코드를 건너뛸 때 사용됩니다.
distinct: 중복된 값을 제거하여 유일한 값을 반환합니다.
groupBy: 지정된 열을 기준으로 그룹화하여 결과를 반환합니다.
having: 그룹화된 결과에 대한 조건을 지정합니다. groupBy와 함께 사용됩니다.
cursor: 페이징 작업에 사용되며, 이전 쿼리의 결과에서 다음 결과를 가져오는 데 사용됩니다.
asRaw: raw 모드에서 실행할 때 사용됩니다.
rejectOnNotFound: 데이터를 찾을 수 없을 때 에러를 발생시킬지 여부를 결정합니다.
includeDeleted: 소프트 삭제된 데이터를 포함할지 여부를 결정합니다.
whereUnique: 고유한 값을 기반으로 데이터를 검색합니다. 주로 단일 레코드를 찾을 때 사용됩니다.