Maison  >  Questions et réponses  >  le corps du texte

Comment récupérer les données d'une autre table référencée par une clé étrangère ?

C'est la table à partir de laquelle je souhaite récupérer les données, j'utilise express pour faire la demande d'obtention depuis la prochaine application :

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

Je souhaite obtenir le type de service de la table de service du fournisseur au lieu de serviceId, c'est mon itinéraire.

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

C'est ainsi que j'obtiens le reste des données API en utilisant 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>
  )

Actuellement, seul le serviceId du fournisseur peut être obtenu, pas le type de service

P粉738821035P粉738821035277 Il y a quelques jours462

répondre à tous(1)je répondrai

  • P粉457445858

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

    Pour obtenir les données d'une autre table référencée par une clé étrangère dans la base de données, vous pouvez utiliser la clause JOIN dans votre requête SQL. La clause JOIN vous permet de combiner des lignes de deux ou plusieurs tables en fonction des colonnes liées entre les tables.

    Voici comment utiliser la clause JOIN 子句从两个表(usersorders pour obtenir les données de deux tables (users et orders), qui sont liées par une clé étrangère.

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

    JOIN 子句根据 user_id 列组合 usersorders 表中的行。 code>orders 表和 users 表中的 id 列。 SELECT 子句指定要从 usersorders combine les lignes des tables users et orders en fonction de la colonne user_id. La colonne id dans la table code>orders et la table users. La clause SELECT spécifie les colonnes à récupérer des tables users et orders.

    Modifié Comment puis-je le référencer dans les routes Express et les requêtes http d'axios ?

    Vous pouvez utiliser la méthode sequelize.query (Sequelize est un ORM Node.js basé sur des promesses) pour exécuter des requêtes SQL brutes.

    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);
      });
    });
    La méthode

    sequelize.query est utilisée pour exécuter une requête SQL brute avec la clause JOIN pour obtenir les données des tables d'utilisateurs et de commandes.

    répondre
    0
  • Annulerrépondre