首页  >  问答  >  正文

如何从外键引用的另一个表中获取数据?

这是我想要获取数据的表,我正在使用express从下一个应用程序发出获取请求:

model Provider {
  id          String    @id @default(cuid())
  name        String
  email       String
  password    String
  phone       String      
  photo       String?
  service     Service?  @relation(fields: [serviceId], references: [id])
  serviceId   String?
  location    Location? @relation(fields: [locationId], references: [id])
  locationId  String?
  createdAt   DateTime  @default(now())
  text        String
  starAverage Float
  medals      Medals[]
  comment     Comment[]
}

model Service {
  id       String     @id @default(cuid())
  type     String
  provider Provider[]
}

我想获取提供商服务表的服务类型,而不是 serviceId,这是我的路线。

router.get('/list', async (req: Request, res: Response) => {
  const allClients = await prisma.client.findMany()
  res.json({allClients})
})

这就是我使用 axios 获取其余 API 数据的方式

const [providers, setProviders] = useState([] as any[])

  useEffect(() => {
    axios.get('http://localhost:5140/providers/list')//my list of all providers
    .then(res => {
      console.log(res)
      setProviders(res.data)
    }).catch(err => {
      console.log(err)
    })
  }, )
  const renderedProviders = Object.values(providers).map(provider => {
    return (
      <div
        className="card"
        style={{ width: "18rem"}}
        key={provider.id}
      >
        <img className="card-img-top" src="..."/>
        <div className="card-body">
          <h3>{provider.name}</h3>
          <p>{provider.starAverage} estrekas</p>
          <p>{provider.serviceId}</p>
        </div>
      </div>
    );
  });
  return (
    <div className="d-flex flex-row flex-wrap justify-content-between">
      {renderedProviders}
    </div>
  )

目前只能获取提供者的serviceId,而不是服务的类型

P粉738821035P粉738821035277 天前457

全部回复(1)我来回复

  • P粉457445858

    P粉4574458582024-01-17 10:30:30

    要从数据库中的外键引用的另一个表中获取数据,您可以在 SQL 查询中使用 JOIN 子句。 JOIN 子句允许您根据表之间的相关列组合两个或多个表中的行。

    这就是如何使用 JOIN 子句从两个表(usersorders)获取数据,这两个表通过外键关联.

    SELECT users.*, orders.*
    FROM users
    JOIN orders ON orders.user_id = users.id

    JOIN 子句根据 user_id 列组合 usersorders 表中的行。 code>orders 表和 users 表中的 id 列。 SELECT 子句指定要从 usersorders 表中检索的列。

    已编辑 如何在 Express 路由和来自 axios 的 http 请求中引用它?

    您可以使用sequelize.query(Sequelize是一个基于promise的Node.js ORM)方法来执行原始SQL查询。

    app.get('/users/:id', (req, res) => {
      const { id } = req.params;
      const query = `
        SELECT users.*, orders.*
        FROM users
        JOIN orders ON orders.user_id = users.id
        WHERE users.id = :id
      `;
      const replacements = { id };
      sequelize.query(query).then(([results, metadata]) => {
        res.send(results);
      });
    });

    sequelize.query 方法用于执行原始 SQL 查询,其中包含 JOIN 子句以从用户和订单表中获取数据。

    回复
    0
  • 取消回复