You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用Prisma查询当前登录用户对应service表的标题数据

实现方案

核心修正点

  • 你当前使用的getStaticProps是静态构建方法,仅在项目编译时执行一次,无法获取每个访问用户的动态登录session,需要替换为服务端渲染方法getServerSideProps,它会在每次用户请求时在服务端执行,可获取请求上下文里的登录态。
  • 你用了findUnique查询单条数据,但单用户可能对应多条service记录,且你后续用了map遍历数组,需要替换为findMany查询多条数据。

完整修改代码

首先导入next-auth的getSession方法用于服务端获取session:

import React from 'react';
import { PrismaClient } from '@prisma/client';
import { signIn, signOut, useSession, getSession } from 'next-auth/client';

// 替换原来的getStaticProps为getServerSideProps
export async function getServerSideProps(context) {
  const prisma = new PrismaClient();
  // 从请求上下文获取当前登录用户的session
  const session = await getSession(context);
  let services = [];

  if (session) {
    // 筛选关联用户ID和当前登录用户ID一致的service记录
    // 注意:如果你的service表关联用户的外键字段名不是userId,替换为你实际的字段名即可
    services = await prisma.service.findMany({
      where: {
        userId: session.user.id
      },
      // 只查需要的id、title字段,优化查询性能
      select: {
        id: true,
        title: true
      }
    })
  }

  return {
    props: {
      services,
    },
  };
}

export default function Home({ services }) {
  const [session] = useSession();

  return (
    <>
      {!session && (
        <>
          Not signed in
          <br />
          <button type="button" onClick={signIn}>Sign In</button>
        </>
      )}
      {session && (
        <>
          Signed in as {session.user.email} <br />
          <ul>
            {services.map((service) => (
              <li key={service.id}>{service.title}</li>
            ))}
          </ul>
        </>
      )}
    </>
  )
}

Prisma模型校验

确保你的schema.prisma里的Service模型有关联用户的外键字段,示例参考:

model Service {
  id     Int    @id @default(autoincrement())
  title  String
  userId Int    // 关联用户表的id字段
  user   User   @relation(fields: [userId], references: [id])
}

model User {
  id       Int       @id @default(autoincrement())
  email    String    @unique
  services Service[]
}

内容的提问来源于stack exchange,提问作者Julia Cassemiro

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 03:15:02