Wie erhalte ich Daten aus einer anderen Tabelle, auf die durch einen Fremdschlüssel verwiesen wird?
P粉738821035
P粉738821035 2024-01-16 11:06:02
0
1
513

Dies ist die Tabelle, aus der ich die Daten abrufen möchte. Ich verwende Express, um die Abrufanforderung von der nächsten App zu stellen:

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[]
}

Ich möchte anstelle der Service-ID den Servicetyp der Anbieter-Servicetabelle erhalten. Dies ist meine Route.

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

So erhalte ich die restlichen API-Daten mit axios

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>
  )

Derzeit kann nur die Service-ID des Anbieters abgerufen werden, nicht die Art des Dienstes

P粉738821035
P粉738821035

Antworte allen(1)
P粉457445858

要从数据库中的外键引用的另一个表中获取数据,您可以在 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 子句以从用户和订单表中获取数据。

Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage