برنامه نویسی

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

پریسما چیست؟

Prisma یک ORM (Object Relational Mapper) است که تعاملات پایگاه داده را برای برنامه های Node.js و TypeScript ساده می کند.
ORM یک ابزار نرم افزاری است که کدهای برنامه نویسی را به ساختارهای پایگاه داده متصل می کند.
اگر متوجه نشدید نگران نباشید.

چرا از پریزما استفاده کنیم؟

  1. به طور خودکار انواع TypeScript را تولید می کند که مزایای زیادی مانند:
  2. پیشگیری از خطا
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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

  1. اکنون پریسما را در پروژه خود مقداردهی اولیه کنید.
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
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

این دستور سه کار را انجام داد:

  1. این یک فایل مهاجرتی جدید SQL برای این مهاجرت ایجاد کرد prisma/migrations کارگردان
  2. فایل مهاجرت SQL را در مقابل پایگاه داده اجرا کرد.
  3. دوید 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. خوشحال می شوم در مورد پروژه هایم یا هر موضوع دیگری که مربوط به توسعه باشد گپ بزنم!

کد نویسی مبارک! 👨‍💻

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا