Rumah  >  Soal Jawab  >  teks badan

Bagaimana untuk mendapatkan data dari jadual lain yang dirujuk oleh kunci asing?

Ini adalah jadual yang saya ingin dapatkan data, saya menggunakan ekspres untuk membuat permintaan dapatkan daripada apl seterusnya:

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

Saya ingin mendapatkan jadual perkhidmatan pembekal jenis perkhidmatan dan bukannya serviceId, ini adalah laluan saya.

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

Ini adalah cara saya mendapatkan data API yang selebihnya menggunakan 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>
  )

Pada masa ini hanya serviceId penyedia boleh diperolehi, bukan jenis perkhidmatan

P粉738821035P粉738821035277 hari yang lalu460

membalas semua(1)saya akan balas

  • P粉457445858

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

    Untuk mendapatkan data daripada jadual lain yang dirujuk oleh kunci asing dalam pangkalan data, anda boleh menggunakan klausa JOIN dalam pertanyaan SQL anda. Klausa JOIN membolehkan anda menggabungkan baris daripada dua atau lebih jadual berdasarkan lajur yang berkaitan antara jadual.

    Ini ialah cara menggunakan klausa JOIN 子句从两个表(usersorders untuk mendapatkan data daripada dua jadual (pengguna dan pesanan), yang berkaitan dengan kunci asing.

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

    JOIN 子句根据 user_id 列组合 usersorders 表中的行。 code>orders 表和 users 表中的 id 列。 SELECT 子句指定要从 usersorders menggabungkan baris daripada jadual pengguna dan order berdasarkan lajur user_id. Lajur id dalam jadual kod>pesanan dan jadual pengguna. Klausa SELECT menentukan lajur untuk diambil daripada jadual pengguna dan order.

    Diedit Bagaimanakah saya boleh merujuknya dalam laluan Ekspres dan permintaan http daripada axios?

    Anda boleh menggunakan kaedah sequelize.query (Sequelize ialah kaedah Node.js ORM berasaskan janji) untuk melaksanakan pertanyaan SQL mentah.

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

    kaedah sequelize.query digunakan untuk melaksanakan pertanyaan SQL mentah dengan klausa JOIN untuk mendapatkan data daripada pengguna dan jadual pesanan.

    balas
    0
  • Batalbalas