[英]How can I save an array of image Urls in MySQL database using Prisma ORM?
我正在使用 Next.js、pl.netscale(MySQL 數據庫)和 Prisma ORM 開發電子商務應用程序。
我有一個可以上傳圖片的表格。 我將這些圖像保存在 Firebase 存儲中。 作為回報,我收到一組圖像網址。 例如,我從 firebase 存儲中收到的數組如下所示:
['https://firebasestorage.googleapis.com/v0/b/ishop-…=media&token=2633c821-38f3-437b-b905-2995168e3b42', 'https://firebasestorage.googleapis.com/v0/b/ishop-…=media&token=163aaf93-accc-4d64-8e27-92609c14aaaa']
現在,我想將這些圖像保存在我的數據庫中。 我正在為我的數據庫使用 pl.netscale,並使用 Prisma 與我的數據庫進行交互。
這是我的問題:
(1) Product
model里面的urls
字段的字段類型應該是什么? 這是我的schema.json
文件:
generator client {
provider = "prisma-client-js"
}
datasource db {
provider = "mysql"
url = env("DATABASE_URL")
relationMode = "prisma"
}
model Product {
id Int @id @default(autoincrement())
urls
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
我知道它不能是標量列表(例如String[]
),因為 MySQL 不支持標量列表。
我也想知道在確定了urls
字段的字段類型后,我是否需要注意如何使用Prisma在數據庫中創建一條記錄?
這是我的product-upload
API 路線,我在哪里使用 Prisma 客戶端在數據庫中創建記錄?
import prisma from "../../lib/prisma";
export default async function handler(req, res) {
if (req.method === "POST") {
try {
const { urls } = req.body;
const product = await prisma.product.create({
data: { urls },
});
res.status(200).json(product);
} catch (error) {
res.status(500).json({ message: error.message });
}
} else {
res.setHeader("Allow", ["POST"]);
res.status(405).json({
message: `HTTP method ${req.method} is not allowed.`,
});
}
}
請注意, Product
model 會有其他字段,但首先,我想先解決這個問題。
您可以創建一個新的 model 來管理產品和 url 之間的一對多關系:
model Product {
id Int @id @default(autoincrement())
urls ProductUrl[]
createdAt DateTime @default(now())
updatedAt DateTime @updatedAt
}
model ProductUrl {
url String
productId Int
product Product @relation(fields: [productId], references: [id], onDelete: Cascade)
@@id([url, productId])
@@index([productId])
}
然后要添加 URL,您會將 API 路由更新為如下內容:
import prisma from "../../lib/prisma";
export default async function handler(req, res) {
if (req.method === "POST") {
try {
// assuming urls is of type string[]
const { urls } = req.body;
const product = await prisma.product.create({
data: {
urls: {
create: urls.map((url) => ({ url })),
},
},
include: {
urls: true,
},
});
res.status(200).json(product);
} catch (error) {
res.status(500).json({ message: error.message });
}
} else {
res.setHeader("Allow", ["POST"]);
res.status(405).json({
message: `HTTP method ${req.method} is not allowed.`,
});
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.