ORM لـ PHP: مقارنة بين Doctrine و Eloquent و Cycle — أمثلة كود

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

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

ابدأ الدورة

ORM لـ PHP: مقارنة وأمثلة



ORM (تعيين الكائنات العلائقية) — هو طبقة وسيطة بين كود PHP وقاعدة البيانات العلائقية. يحول صفوف الجداول إلى كائنات، واستعلامات SQL إلى دوال. يوجد العديد من حلول ORM الناضجة لـ PHP. في هذه المقالة سنستعرض ثلاثة من أشهرها: Doctrine و Eloquent (من Laravel) و Cycle. ستتعرف على فلسفتها، تركيبها، وستحصل على أمثلة كود جاهزة.



1. Doctrine ORM — Data Mapper



Doctrine — أقوى وأكثر ORM نضجًا لـ PHP. يستخدم نمط Data Mapper: الكيانات (Entity) لا تعلم عن قاعدة البيانات، وكل العمل مع قاعدة البيانات يتم عبر المستودعات ومدير الكيانات EntityManager.



// مثال لكيان في Doctrineuse Doctrine\\ORM\\Mapping as ORM;

/** * @ORM\\Entity * @ORM\\Table(name="users") */class User{ /** @ORM\\Id @ORM\\Column(type="integer") @ORM\\GeneratedValue */ private int $id;

/** @ORM\\Column(type="string", length=100) */ private string $name;

public function getName(): string { return $this->name; }

public function setName(string $name): void { $this->name = $name; }}

// الحفظ والاسترجاع$user = new User();$user->setName('أليكسي');$entityManager->persist($user);$entityManager->flush();

$users = $entityManager->getRepository(User::class)->findAll();


2. Eloquent ORM — Active Record



Eloquent — ORM من إطار العمل Laravel. يستخدم نمط Active Record: كل كائن يعرف بنفسه كيف يحفظ نفسه في قاعدة البيانات. الكود مضغوط وبديهي، مثالي للتطوير السريع.



// نموذج Eloquentuse Illuminate\\Database\\Eloquent\\Model;

class User extends Model{ protected $table = 'users'; protected $fillable = ['name'];}

// إنشاء سجل$user = User::create(['name' => 'ماريا']);

// القراءة$users = User::where('name', 'like', '%ما%')->get();

foreach ($users as $user) { echo $user->name;}

// التحديث$user = User::find(1);$user->name = 'أولغا';$user->save();


3. Cycle ORM — نهج هجين



Cycle — ORM حديث من مؤلفي إطار العمل Spiral. يجمع أفضل ميزات Data Mapper و Active Record. يعمل أسرع من Doctrine بفضل تخزين المخطط مؤقتًا وغياب السحر. يدعم الكتابة الصارمة.



// كيان Cycleuse Cycle\\Annotated\\Annotation as Cycle;

/** * @Cycle\\Entity * @Cycle\\Table(name="users") */class User{ /** @Cycle\\Column(type="primary") */ public int $id;

/** @Cycle\\Column(type="string") */ public string $name;}

// الحفظ$user = new User();$user->name = 'إيفان';$orm->persist($user);$orm->run();

// البحث$users = $orm->getRepository(User::class)->select()->fetchAll();


مقارنة ORM لـ PHP



الخاصية Doctrine Eloquent Cycle
النمط Data Mapper Active Record هجين
الأداء متوسط عالي (مع التخزين المؤقت) عالي
الارتباط بإطار العمل مستقل Laravel Spiral / مستقل
توليد الترحيلات مدمج عبر Artisan

توصيات