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

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

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

ابدأ الدورة

ما هو TypeORM ولماذا هو مطلوب؟

\n\n

TypeORM هي مكتبة قوية للربط بين الكائنات وقواعد البيانات العلائقية (ORM) لـ TypeScript و JavaScript، تعمل مع قواعد بيانات مختلفة: PostgreSQL، MySQL، MariaDB، SQLite، MS SQL Server، Oracle و MongoDB (جزئيًا). توفر طريقة ملائمة للتفاعل مع قواعد البيانات العلائقية من خلال نهج موجه للكائنات، مما يسمح للمطورين بالعمل مع الجداول كفئات، ومع السجلات ككائنات.

\n\n

الأسباب الرئيسية لاستخدام TypeORM:

\n
    \n
  • الكتابة (Typing): تكامل كامل مع TypeScript يوفر كتابة صارمة وإكمال تلقائي في بيئة التطوير المتكاملة (IDE).
  • \n
  • النهج التصريحي: تعريف مخطط قاعدة البيانات من خلال الديكورات (Decorators) أو المخططات.
  • \n
  • الترحيل التلقائي (Auto-migrations): إنشاء ومزامنة تلقائية لمخطط قاعدة البيانات.
  • \n
  • السجل النشط (Active Record) و Data Mapper: دعم كلا النمطين الشائعين.
  • \n
  • دعم العلاقات: واحد إلى واحد، واحد إلى متعدد، متعدد إلى متعدد.
  • \n
  • منشئ الاستعلامات (Query Builder): منشئ استعلامات مرن للاستعلامات SQL المعقدة.
  • \n
  • التوافق عبر المنصات: يعمل مع Node.js، المتصفحات، React Native و Ionic.
  • \n
\n\n

تثبيت TypeORM

\n\n

لتثبيت TypeORM وبرامج تشغيل قاعدة البيانات المطلوبة، استخدم npm (أو yarn):

\n\n
// تثبيت TypeORM\nnpm install typeorm --save\n\n// تثبيت reflect-metadata (إلزامي للديكورات)\nnpm install reflect-metadata --save\n\n// تثبيت برنامج تشغيل PostgreSQL\nnpm install pg --save\n\n// تثبيت برنامج تشغيل MySQL/MariaDB\nnpm install mysql2 --save\n\n// تثبيت برنامج تشغيل SQLite\nnpm install sqlite3 --save\n\n// تثبيت برنامج تشغيل SQL Server\nnpm install mssql --save\n\n// تثبيت برنامج تشغيل MongoDB (تجريبي)\nnpm install mongodb --save
\n\n

بعد التثبيت، أضف إلى tsconfig.json:

\n\n
{\n  "compilerOptions": {\n    "emitDecoratorMetadata": true,\n    "experimentalDecorators": true\n  }\n}
\n\n

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

\n\n

لنقم بإنشاء تطبيق بسيط لإدارة المستخدمين باستخدام SQLite (لا يتطلب تثبيت خادم).

\n\n

1. أنشئ ملف data-source.ts لتكوين الاتصال:

\n\n
import { DataSource } from "typeorm";\nimport { User } from "./entity/User";\n\nexport const AppDataSource = new DataSource({\n    type: "sqlite",\n    database: "database.sqlite",\n    synchronize: true,\n    logging: true,\n    entities: [User],\n    subscribers: [],\n    migrations: [],\n});\n\n// تهيئة الاتصال\nAppDataSource.initialize()\n    .then(() => {\n        console.log("تم تهيئة مصدر البيانات!");\n    })\n    .catch((err) => {\n        console.error("خطأ أثناء تهيئة مصدر البيانات:", err);\n    });
\n\n

2. أنشئ كيان User في ملف entity/User.ts:

\n\n
import { Entity, PrimaryGeneratedColumn, Column } from "typeorm";\n\n@Entity()\nexport class User {\n    @PrimaryGeneratedColumn()\n    id: number;\n\n    @Column()\n    firstName: string;\n\n    @Column()\n    lastName: string;\n\n    @Column({ unique: true })\n    email: string;\n\n    @Column({ default: true })\n    isActive: boolean;\n}
\n\n

3. أنشئ ملف index.ts لعرض العمل:

\n\n
import "reflect-metadata";\nimport { AppDataSource } from "./data-source";\nimport { User } from "./entity/User";\n\nasync function main() {\n    await AppDataSource.initialize();\n\n    // إنشاء مستخدم جديد\n    const user = new User();\n    user.firstName = "إيفان";\n    user.lastName = "بيتروف";\n    user.email = "ivan@example.com";\n    user.isActive = true;\n\n    // حفظ في قاعدة البيانات\n    await AppDataSource.manager                    

توصيات