تكامل TypeORM والكيانات
تكامل TypeORM والكيانات
تحتاج معظم التطبيقات الحقيقية إلى قاعدة بيانات. TypeORM أشهر ORM لـ NestJS — يُطابق أصناف TypeScript بجداول قاعدة البيانات، فتعمل بالكائنات بدل SQL الخام. يوفّر NestJS حزمة @nestjs/typeorm مخصّصة تدمجه بنظافة مع الوحدات وحقن التبعيات.
الاتصال بقاعدة البيانات
ثبّت الحزم واضبط الاتصال مرّة واحدة بـ TypeOrmModule.forRoot() في وحدة الجذر:
تعريف كيان
الكيان صنف مُزخرَف بـ @Entity()؛ وأعمدته خصائص مُزخرَفة بمُزخرِفات الأعمدة:
مُزخرِفات الأعمدة الشائعة
@PrimaryGeneratedColumn()— مفتاح أساسي متزايد تلقائيًا (أو'uuid'لمعرّف UUID).@Column()— عمود عادي، بخيارات كـtypeوlengthوnullableوuniqueوdefault.@CreateDateColumn()/@UpdateDateColumn()— طوابع زمنية تلقائية.@Index()— إضافة فهرس قاعدة بيانات لبحث أسرع.
تسجيل الكيان في وحدة ميزة
لاستخدام مستودع كيان داخل ميزة، سجّله بـ forFeature():
هذا يجعل Repository<User> قابلًا للحقن في تلك الوحدة — وهو ما تستعلم وتحفظ به المستخدمين، في الدرس التالي.
forRoot() اتصال قاعدة البيانات مرّة (وحدة الجذر)؛ وتُسجّل forFeature() مستودعات كيانات محدّدة للوحدات التي تحتاجها. ستتعرّف على نمط الوحدة الديناميكية هذا من قبل.
الإعداد غير المتزامن
في تطبيق حقيقي تأتي تفاصيل الاتصال من الإعداد لا من قيم مُرمَّزة. استخدم forRootAsync() لحقن ConfigService:
الخلاصة
يُطابق TypeORM الأصناف بالجداول. اضبط الاتصال بـ TypeOrmModule.forRoot() (أو forRootAsync() مع الإعداد)، وعرّف الكيانات بـ @Entity() ومُزخرِفات الأعمدة، وسجّلها لكل ميزة بـ forFeature(). أبقِ synchronize مُطفأة في الإنتاج. تاليًا نستخدم المستودع الذي يولّده هذا للقراءة والكتابة.