Heim  >  Fragen und Antworten  >  Hauptteil

Wie erhalte ich Daten aus einer anderen Tabelle, auf die durch einen Fremdschlüssel verwiesen wird?

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粉738821035P粉738821035277 Tage vor459

Antworte allen(1)Ich werde antworten

  • 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 子句以从用户和订单表中获取数据。

    Antwort
    0
  • StornierenAntwort