پریسما 101 عزیزم. – انجمن DEV

پریسما چیست؟
Prisma یک ORM (Object Relational Mapper) است که تعاملات پایگاه داده را برای برنامه های Node.js و TypeScript ساده می کند.
ORM یک ابزار نرم افزاری است که کدهای برنامه نویسی را به ساختارهای پایگاه داده متصل می کند.
اگر متوجه نشدید نگران نباشید.
چرا از پریزما استفاده کنیم؟
- به طور خودکار انواع TypeScript را تولید می کند که مزایای زیادی مانند:
- پیشگیری از خطا
const user = await prisma.user.findUnique({
where: { id: "123" }, // Error: `id` expects a number, not a string!
});
- تکمیل خودکار
- بازسازی بدون درز: اگر شما طرح پایگاه داده خود را به روز کنید، Prisma انواع تولید شده را به روز می کند و IDE شما مکان هایی را که نیاز به تغییرات در کد خود دارید برجسته می کند.
- روابط قوی تایپ شده: Prisma روابط بین جداول را درک می کند و بر اساس آن انواع را تولید می کند.
- این تمام چیزی است که من برای prisma 101 اهمیت می دهم. ## چگونه prisma را راه اندازی کنیم؟
- Prisma CLI را به عنوان یک وابستگی توسعه دهنده در پروژه نصب کنید.
pnpm add prisma -d
- اکنون پریسما را در پروژه خود مقداردهی اولیه کنید.
npx prisma init --datasource-provider mysql # depends on what you use.
این باعث ایجاد یک prisma
dir با a schema.prisma
فایل و mysql را به عنوان پایگاه داده شما پیکربندی می کند.
و این تنها کاری است که باید انجام دهید. چقدر راحت pg
منشور
در این فایل مدل/schema را تعریف می کنید.
model Gf {
id Int @id @default(autoincrement())
name String @db.Varchar(255)
Chats Chat[] @relation("GfToChats")
}
model Chat{
id Int @id @default(autoincrement())
msg String @db.Text
gfId Int
gf Gf @relation("GfToChats", fields:[gfId] references:[id])
}
اما قبل از اینکه به مرحله بعدی برویم، اجازه دهید کمی در مورد کدهای از قبل موجود صحبت کنم.
// Generator block: Specifies what Prisma should generate after running
`prisma generate`.
generator client {
provider = "prisma-client-js" // Generates the Prisma Client for JavaScript/TypeScript.
}
// Datasource block: Defines the connection to your database.
datasource db {
provider = "mysql" // Specifies the type of database you're using (MySQL in this case).
url = env("DATABASE_URL")
}
حالا بعدش چی؟
مهاجرت
در این مرحله، شما یک طرح Prisma دارید اما هنوز پایگاه داده ای ندارید. دستور زیر را در ترمینال خود اجرا کنید تا پایگاه داده mysql و Gf
و Chat
جداول نشان داده شده توسط مدل های شما:
npx prisma migrate dev --name init
این دستور سه کار را انجام داد:
- این یک فایل مهاجرتی جدید SQL برای این مهاجرت ایجاد کرد
prisma/migrations
کارگردان - فایل مهاجرت SQL را در مقابل پایگاه داده اجرا کرد.
- دوید
prisma generate
زیر کاپوت (که نصب شده است@prisma/client
بسته و یک Prisma Client API مناسب بر اساس مدل های شما ایجاد کرد. ##prisma generate
npx prisma generate
دستوری در Prisma CLI است که فایل طرحواره Prisma شما را می خواند و یک سرویس گیرنده پایگاه داده اختصاصی به نام “Prisma Client” ایجاد می کند که به شما امکان می دهد با استفاده از پرس و جوهای نوع ایمن با پایگاه داده خود تعامل داشته باشید و اساسا کدهای لازم را برای انجام عملیات هایی مانند ایجاد، خواندن ایجاد کنید. ، به روز رسانی و حذف داده ها بر اساس مدل های داده تعریف شده شما در طرحواره. شما باید هر زمان که تغییراتی در طرح Prisma خود ایجاد می کنید تا کد مشتری تولید شده را به روز کنید، این دستور را اجرا کنید. می توانید بگویید که توابعی با تایپ قوی برای تعامل با db ایجاد می کند. “این طوری تصور می کنم.”
prisma studio
npx prisma studio
یک رابط کاربری وب برای تعامل با شما db می دهد.
مشتری Prisma
اکنون که Prisma Client تولید شده است، می توانید از آن برای تعامل با پایگاه داده خود استفاده کنید.
// for not serverless application
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
export default prisma;
// for serverless
import { PrismaClient } from "@prisma/client";
const prismaClientSingleton = () => {
return new PrismaClient();
};
declare const globalThis: {
prismaGlobal: ReturnType<typeof prismaClientSingleton>;
} & typeof global;
const prisma = globalThis.prismaGlobal ?? prismaClientSingleton();
export default prisma;
if (process.env.NODE_ENV !== "production") globalThis.prismaGlobal = prisma;
تعامل با db
اکنون وارد عمل می شوید و Gf یا چت ایجاد می کنید.
// Create a new Gf
import prisma from @/lib/db
const create Gf = async () =>{
const gf = await prisma.Gf.create({
data:{
name:"rishi",
email:"mujrawala@gfmail.com",
Chats: { create: { msg: "Hello" } }
}
});
console.log("Created a new Gg:",gf.name);
}
// breakup
const breakup= async() => {
const ex = await prisma.Gf.delete({ where: { name: "jainam" }});
console.log("Broke up with:", ex.name);
}
قطع اتصال دسته
فراموش نکنید که پس از اتمام استفاده از Prisma Client، اتصال آن را قطع کنید تا از نشت حافظه یا مشکلات اتصال پایگاه داده جلوگیری کنید.
try{
// Try creating new gf, break up or patch up
}catch{
// Cant even make a gf, f**king looser
}finally{
await prisma.$disconnect();
}
اسکریپت بذر
یک اسکریپت بذر است اسکریپتی که داده های ساختگی تولید می کند
// prisma/seed.ts
import { PrismaClient } from '@prisma/client';
const prisma = new PrismaClient();
async function main() {
await prisma.gf.create({
data: {
name: "raashed",
email:"raaseed@gfmail.com"
},
});
}
main().catch(e => {
throw e;
}).finally(async () => {
await prisma.$disconnect();
});
اطلاعات بیشتر در مورد مهاجرت
مهاجرت پریسما به شما امکان می دهد تغییرات طرح واره پایگاه داده را در طول زمان مدیریت کنید و اعمال، ردیابی و بازگرداندن تغییرات در پایگاه داده خود را آسان می کند.prisma migrate dev
در مقابل prisma migrate deploy
-
npx prisma migrate dev
: این دستور در هنگام توسعه استفاده می شود. به طور خودکار مهاجرت های جدید را به پایگاه داده شما اعمال می کند و همچنین Prisma Client شما را بر اساس تغییرات طرحواره به روز می کند. زمانی ایده آل است که شما فعالانه روی طرحواره خود کار می کنید و می خواهید به سرعت تغییرات را اعمال کنید. -
npx prisma migrate deploy
: این دستور برای استقرار مهاجرت ها به پایگاه داده تولید استفاده می شود. بر خلافdev
، مهاجرت های جدیدی ایجاد نمی کند. در عوض، تمام مهاجرتهای معلق ایجاد شده در طول توسعه را اعمال میکند. ##prisma db push
اگر از مهاجرت استفاده نمی کنید (مثلاً در پروژه های ساده تر یا نمونه های اولیه)، می توانید استفاده کنیدnpx prisma db push
برای فشار دادن طرحواره Prisma خود به طور مستقیم به پایگاه داده. با این کار جداول بر اساس طرح Prisma شما اما بدون ردیابی و ویژگیهای برگشتی مهاجرت ایجاد میشود. این برای تغییرات سریع مفید است اما برای محیط های تولید توصیه نمی شود.
من دوست دارم نظرات شما را بشنوم! اگر این آموزش را مفید دیدید یا پیشنهادی برای بهبود دارید، لطفاً نظر خود را در زیر بنویسید. بازخورد شما بسیار قدردانی می شود!
اگر مایل به برقراری ارتباط یا بحث بیشتر هستید، در صورت تمایل با من تماس بگیرید thekbbohara. خوشحال می شوم در مورد پروژه هایم یا هر موضوع دیگری که مربوط به توسعه باشد گپ بزنم!
کد نویسی مبارک! 👨💻