Prisma لـ TypeScript: دليل شامل مع أمثلة

مدرب بايثون أونلاين للمبتدئين

تعلم Python بسهولة دون إرهاق نظري. حل مهام عملية مع التحقق التلقائي واكتب الكود مباشرة في المتصفح.

ابدأ الدورة

مقدمة إلى Prisma: ORM حديث لـ TypeScript

\n\n

Prisma هو ORM (تعيين الكائنات العلائقية) حديث لـ TypeScript و Node.js، يغير جذريًا طريقة التعامل مع قواعد البيانات. على عكس ORMs التقليدية مثل Sequelize أو TypeORM، يقدم Prisma نموذج بيانات تصريحيًا، وتوليدًا تلقائيًا للأنواع، وواجهة برمجة تطبيقات بديهية. تدعم المكتبة PostgreSQL، MySQL، SQLite، SQL Server، MongoDB و CockroachDB.

\n\n

الهدف الرئيسي لـ Prisma هو جعل العمل مع قواعد البيانات آمنًا وفعالًا ومريحًا. بفضل التكامل مع TypeScript، تحصل على الإكمال التلقائي والتحقق من الأنواع على مستوى التجميع، مما يقلل بشكل كبير من أخطاء وقت التشغيل. يتكون Prisma من ثلاثة مكونات رئيسية:

\n\n
    \n
  • Prisma Client — عميل تم إنشاؤه تلقائيًا للعمل مع قاعدة البيانات
  • \n
  • Prisma Migrate — نظام إدارة الترحيلات
  • \n
  • Prisma Studio — واجهة رسومية لعرض وتحرير البيانات
  • \n
\n\n

تثبيت Prisma

\n\n

يتم تثبيت Prisma في مشروع TypeScript عبر npm. للبدء، أنشئ مشروعًا جديدًا:

\n\n
mkdir my-prisma-project\ncd my-prisma-project\nnpm init -y
\n\n

قم بتثبيت Prisma CLI و Prisma Client:

\n\n
npm install prisma @prisma/client --save
\n\n

قم بتهيئة Prisma في المشروع:

\n\n
npx prisma init
\n\n

سينشئ هذا الأمر دليلاً باسم prisma مع ملف schema.prisma وملف .env لمتغيرات البيئة.

\n\n

بداية سريعة: مثال كود

\n\n

لننظر في إنشاء تطبيق بسيط لإدارة المستخدمين. أولاً، حدد النموذج في prisma/schema.prisma:

\n\n
generator client {\n  provider = "prisma-client-js"\n}\n\ndatasource db {\n  provider = "sqlite"\n  url      = env("DATABASE_URL")\n}\n\nmodel User {\n  id        Int      @id @default(autoincrement())\n  email     String   @unique\n  name      String?\n  posts     Post[]\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}\n\nmodel Post {\n  id        Int      @id @default(autoincrement())\n  title     String\n  content   String?\n  published Boolean  @default(false)\n  author    User     @relation(fields: [authorId], references: [id])\n  authorId  Int\n  createdAt DateTime @default(now())\n  updatedAt DateTime @updatedAt\n}
\n\n

نفذ الترحيل لإنشاء الجداول في SQLite:

\n\n
npx prisma migrate dev --name init
\n\n

الآن، أنشئ ملفًا باسم index.ts مع مثال للاستخدام:

\n\n
import { PrismaClient } from '@prisma/client'\n\nconst prisma = new PrismaClient()\n\nasync function main() {\n  // إنشاء مستخدم\n  const user = await prisma.user.create({\n    data: {\n      email: 'alice@example.com',\n      name: 'Alice',\n      posts: {\n        create: { title: 'Hello World' }\n      }\n    }\n  })\n  console.log('Created user:', user)\n\n  // الحصول على جميع المستخدمين مع منشوراتهم\n  const users = await prisma.user.findMany({\n    include: { posts: true }\n  })\n  console.log('All users:', JSON.stringify(users, null, 2))\n}\n\nmain()\n  .catch(e => console.error(e))\n  .finally(async () => await prisma.$disconnect())
\n\n

قم بتشغيل الكود:

\n\n
npx ts-node index.ts
\n\n

الطرق الأساسية لـ Prisma Client

\n\n

1. findUnique

\n

ما يفعله: يبحث عن سجل فريد بناءً على معرف فريد (id، email، إلخ).

\n

المعلمات:

\n
    \n
  • where — كائن بشروط البحث (إلزامي)
  • \n
  • include — (اختياري) لتضمين النماذج المرتبطة
  • \n
  • select — (اختياري) لاختيار حقول محددة
  • \n
\n

مثال:

\n
const user = await prisma.user.findUni                    

توصيات