GraphQLプロジェクト-5
13046 ワード
Self referencing relationship
followers User[] @relation("FollowRelation",references: [id])
following User[] @relation("FollowRelation",references: [id])
User Modelで関係を宣言します.
followers User[] @relation("FollowRelation",references: [id])
following User[] @relation("FollowRelation",references: [id])
追従を増やすと、追従者も自動的に上昇します.
await client.user.update({
where: {id: loggedInUser.id},
data: {
following: {
connect: {
username,
},
},
},
});
connectキーを使用して他のオブジェクトに関連付けます.どのような情報に基づいて接続するかは、特別に設定されたフィールドを使用して接続する必要があります.
const user = await client.user.findUnique({
where: {username},
// 원하는 관계에 대한 정보를 갖고 올 수 있음
include: {
following: true,
followers: true,
},
});
接続されている2つのオブジェクトを解除する場合は、disconnectを使用します. await client.user.update({
where: {id: loggedInUser.id},
data: {
following: {
disconnect: {
username,
},
},
},
});
pagination
const aFollowers = await client.user.findUnique({
where: {username},
}).followers();
// relation 된 객체를 체이닝으로 찾을 수 있다.
const b = await client.user.findMany({
where: {following: {some: {username}}},
});
// none : 필더 조건에 매치되는 모든 관계값을 제외하고 리턴
// every :필터되는 요소에 완전히 부합되는 모든 관계값을 리턴
// some : 필터링되는 요소에 하나 이상이 부합되는 값을 리턴
Offset Pagination
const followers = await client.user
.findUnique({
where: {username},
})
.followers({
take: 5,
skip: (page - 1) * 5,
});
const totalFollowers = await client.user.count({
where: {following: {some: {username}}},
});
return {
ok: true,
followers,
totalPages: Math.ceil(totalFollowers / 5),
};
await client.user.findUnique({
where: {username},
select: {id: true},
});
//プレイヤー全体をインポートせずselectのみでidをインポート
Cursor based Pagination
const following = await client.user
.findUnique({
where: {username},
})
.following({
take: 5,
skip: 1 ,
cursor: {id: lastId}}),
});
return {
ok: true,
following,
};
const aFollowers = await client.user.findUnique({
where: {username},
}).followers();
// relation 된 객체를 체이닝으로 찾을 수 있다.
const b = await client.user.findMany({
where: {following: {some: {username}}},
});
// none : 필더 조건에 매치되는 모든 관계값을 제외하고 리턴
// every :필터되는 요소에 완전히 부합되는 모든 관계값을 리턴
// some : 필터링되는 요소에 하나 이상이 부합되는 값을 리턴
const followers = await client.user
.findUnique({
where: {username},
})
.followers({
take: 5,
skip: (page - 1) * 5,
});
const totalFollowers = await client.user.count({
where: {following: {some: {username}}},
});
return {
ok: true,
followers,
totalPages: Math.ceil(totalFollowers / 5),
};
const following = await client.user
.findUnique({
where: {username},
})
.following({
take: 5,
skip: 1 ,
cursor: {id: lastId}}),
});
return {
ok: true,
following,
};
Reference
この問題について(GraphQLプロジェクト-5), 我々は、より多くの情報をここで見つけました https://velog.io/@wonjongseo/GraphQl-프로젝트-5テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol