GraphQLプロジェクト-5

13046 ワード

Self referencing relationship


  followers User[]  @relation("FollowRelation",references: [id])
  following User[]  @relation("FollowRelation",references: [id])
User Modelで関係を宣言します.
  • 関係属性はrefを有する
  • Refは、別のバージョンのfiedlのlist
  • です.

    追従を増やすと、追従者も自動的に上昇します.
     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,
                };
  • デベが最後に確認した値
  • を伝えなければならない.