Maison > Questions et réponses > le corps du texte
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粉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
子句从两个表(users
和 orders
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.idLa clause
JOIN
子句根据 user_id
列组合 users
和 orders
表中的行。 code>orders 表和 users
表中的 id
列。 SELECT
子句指定要从 users
和 orders
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.