搜尋

首頁  >  問答  >  主體

如何從外鍵引用的另一個表中取得資料?

這是我想要獲取資料的表,我正在使用express從下一個應用程式發出獲取請求:

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

我想取得提供者服務表的服務類型,而不是 serviceId,這是我的路線。

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

這就是我使用 axios 來取得其餘 API 資料的方式

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

目前只能取得提供者的serviceId,而不是服務的型別

P粉738821035P粉738821035319 天前512

全部回覆(1)我來回復

  • 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 子句以從使用者和訂單表中取得資料。

    回覆
    0
  • 取消回覆