انتقل إلى محتوى الدرس
الدرس 38
دورة إطار العمل Laravel

تحويل الأنواع والمسترجعات والمعدلات ومصانع النماذج في EloquentEloquent Attribute Casts Accessors Mutators and Factories

تحويل أنواع الخصائص عبر دالة casts وبناء المسترجعات والمعدلات ونطاقات الاستعلام وتوليد البيانات الاختبارية بالمصانع Factories.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

في إصداري Laravel 11 و 12، يُعرّف تحويل أنواع الحقول داخل دالة محمية باسم casts في نموذج Eloquent بدلاً من خاصية المصفوفة القديمة. تحول هذه الدالة نصوص وأرقام قاعدة البيانات الخام تلقائياً إلى أنواع PHP غنية مثل القيم المنطقية وتواريخ Carbon والمصفوفات والتعدادات.

  • صيغة دالة التحويل (casts Method): تعيد مصفوفة ترابطية تربط اسم العمود بنوع البيانات أو كلاس التحويل المستهدف.
  • تحويل المصفوفات (array & json Casts): يحول مصفوفات PHP إلى نص JSON عند الحفظ ويعيد فكها تلقائياً عند القراءة.
  • دعم التواريخ والتعدادات (datetime & Enum): يحول النصوص الزمنية إلى كائنات Carbon وقيم الحالة إلى كائنات Enum قياسية.
مخطط معماري يوضح تحويل الأنواع والمسترجعات والمعدلات ومصانع النماذج في Eloquent في إطار العمل Laravel 12
PHP
protected function casts(): array
{
    return [
        'is_published' => 'boolean',
        'settings' => 'array',
        'published_at' => 'datetime',
    ];
}

تتيح لك المسترجعات والمعدلات تنسيق قيم حقول نموذج Eloquent عند قراءتها أو معالجتها قبل كتابتها في قاعدة البيانات. يدمج Laravel الحديث العمليتين معاً في دالة محمية واحدة تعيد كائناً من Attribute::make يستقبل دالتي get و set بالمعاملات المسماة.

  • دالة القراءة (Accessor get): تنسق قيمة الحقل أو تحسبها ديناميكياً في كل مرة تُقرأ فيها الخاصية من الكائن.
  • دالة التعديل (Mutator set): تطبع أو تنظف القيمة المدخلة قبل تخزينها في مصفوفة خصائص النموذج الداخلية.
  • تسمية الدالة (camelCase Naming): الدالة المسماة firstName ترتبط تلقائياً بالعمود first_name المكتوب بشرطة سفلية.
PHP
use Illuminate\Database\Eloquent\Casts\Attribute;

protected function title(): Attribute
{
    return Attribute::make(
        get: fn (string $val) => ucfirst($val),
        set: fn (string $val) => strtolower($val),
    );
}

تسمح لك نطاقات الاستعلام المحلية بتغليف شروط التصفية والترتيب المتكررة داخل دوال معبرة وقابلة لإعادة الاستخدام مباشرة داخل كلاس النموذج. عبر بدء اسم الدالة بالبادئة scope مثل scopeActive، يمكنك استدعاء دالة active بسلاسة في أي سلسلة استعلام دون تكرار الشروط.

  • اصطلاح البادئة (scope Prefix): عرّف الدالة باسم scopePublished داخل النموذج واستدعها بصيغة Post::published في الاستعلام.
  • النطاقات الديناميكية (Dynamic Scopes): استقبل معاملات إضافية بعد معامل كائن الباني لبناء فلاتر مرنة قابلة للتخصيص.
  • التسلسل السلس (Fluent Chaining): ادمج عدة نطاقات محلية معاً في سلسلة استعلام واحدة واضحة وسهلة القراءة.
PHP
use Illuminate\Database\Eloquent\Builder;

public function scopeActive(Builder $query): void
{
    $query->where('is_active', true);
}

$posts = Post::active()->latest()->get();

تولد مصانع النماذج سجلات وهمية واقعية لأغراض التطوير المحلي والاختبارات الآلية بالاعتماد على مكتبة Faker المدمجة في Laravel. عبر إضافة سمة HasFactory إلى النموذج وتحديد القيم الافتراضية للحقول في دالة definition داخل كلاس المصنع، يمكنك إنشاء وحفظ النماذج التجريبية بسهولة.

  • سمة المصنع (HasFactory Trait): تربط نموذج Eloquent بكلاس المصنع المقابل له داخل مجلد database/factories.
  • دالة التعريف (definition Method): تعيد المصفوفة الافتراضية لقيم الحقول الوهمية المولدة عبر الدالة المساعدة fake.
  • الفرق بين الإنشاء والحفظ (make vs create): تبني دالة make الكائنات في الذاكرة فقط، بينما تحفظها دالة create فعلياً في قاعدة البيانات.
PHP
use Illuminate\Database\Eloquent\Factories\HasFactory;

class Post extends Model
{
    use HasFactory;
}

$post = Post::factory()->create();

تتيح لك دوال الحالات في المصنع تطبيق تعديلات محددة على التعريف الافتراضي، مثل تمييز المستخدم المولد كمدير أو تفعيل حالة النشر للمقال. يمكّنك دمج تحديد العدد وتبديل الحالات داخل فئات البذر Seeders من ملء قاعدة البيانات ببيانات تطوير غنية ومتنوعة في ثوانٍ.

  • تخصيص الحالة (state Method): تستدعي دوال المصنع المخصصة دالة state لتعديل حقول معينة فوق القيم الافتراضية.
  • التوليد بالجملة (count Generation): مرر العدد المطلوب إلى دالة count لتوليد عشرات السجلات المتنوعة بأمر واحد.
  • تجاوز القيم المباشر (Attribute Overrides): مرر مصفوفة قيم إلى دالة create لتثبيت حقول بعينها أثناء التوليد.
PHP
public function suspended(): static
{
    return $this->state(fn () => [
        'status' => 'suspended',
    ]);
}

User::factory()->count(5)->suspended()->create();

تحافظ التحويلات التلقائية والمسترجعات والنطاقات المحلية ومصانع النماذج على نظافة المتحكمات وخلوها من كود التنسيق أو شروط الاستعلام المكررة. يضمن توحيد تحويل البيانات وتوليد السجلات الاختبارية في طبقة النموذج سلوكاً متسقاً وموثوقاً عبر كافة أجزاء التطبيق.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحسنمعيار Laravel 12 الحديث
التعامل مع أعمدة JSONاستدعاء دوال فك وترميز JSON يدوياً داخل المتحكماتتعريف تحويل المصفوفة تلقائياً داخل دالة casts الحديثة
تنسيق وتعديل الحقولكتابة دالتين منفصلتين بالصيغة القديمة لكل حقل في النموذجإرجاع كائن Attribute::make يجمع القراءة والتعديل في دالة واحدة
شروط الاستعلام المتكررةنسخ ولصق شروط التصفية في كل متحكم على حدةتغليف الشروط في دالة نطاق محلية قابلة لإعادة الاستخدام
إنشاء بيانات الاختباركتابة حلقات تكرار يدوية بقيم ثابتة وغير واقعيةاستخدام سمة HasFactory ودوال المصنع لتوليد سجلات غنية
PHP
$posts = Post::active()
    ->where('views', '>', 100)
    ->get();

$drafts = Post::factory()
    ->count(3)
    ->create(['is_published' => false]);
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

مراجعة مركّزة لأهم المفاهيم والقواعد الهندسية التي أتقنتها في هذا الدرس قبل التطبيق العملي

ماذا تعلّمت في هذا الدرس؟

أتقنت في هذا الدرس حول «تحويل الأنواع والمسترجعات والمعدلات ومصانع النماذج في Eloquent» مفاهيم تحويل الأنواع عبر دالة Casts، والمسترجعات والمعدلات عبر Attribute، ونطاقات الاستعلام المحلية Scopes وفق معايير Laravel 12 الحديثة.

الخطوة التالية والدرس القادم

انتقل الآن إلى الدرس التالي «علاقتا واحد لواحد وواحد لمتعدد في نماذج Eloquent» للبناء التراكمي على ما تعلمته.

مشاركة

هل كان هذا الدرس مفيدًا؟

جارٍ تحميل الآراء…

ابنِ لغتك البرمجية

المصطلحات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Model Factories المعدلات والمصانع
تحويل أنواع الخصائص عبر دالة casts وبناء المسترجعات والمعدلات ونطاقات الاستعلام وتوليد البيانات الاختبارية بالمصانع Factories.
للمراجعة
02 Modern Attribute Casts Method تحويل الأنواع عبر دالة Casts
المفهوم الهندسي والتطبيق العملي المباشر لقسم تحويل الأنواع عبر دالة Casts في إطار العمل Laravel 12.
للمراجعة
03 Eloquent Accessors and Mutators المسترجعات والمعدلات عبر Attribute
المفهوم الهندسي والتطبيق العملي المباشر لقسم المسترجعات والمعدلات عبر Attribute في إطار العمل Laravel 12.
للمراجعة
04 Reusable Local Query Scopes نطاقات الاستعلام المحلية Scopes
المفهوم الهندسي والتطبيق العملي المباشر لقسم نطاقات الاستعلام المحلية Scopes في إطار العمل Laravel 12.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

حروف قليلة. معنى كامل.

الاختصارات4

راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.

0 / 4 مفهومةأول بطاقة، أول خطوة
01 MVC MVC
Model View Controller
النمط المعماري الذي يفصل بين نماذج البيانات Models، وطبقات العرض Views، والمتحكمات Controllers في Laravel.
للمراجعة
02 CLI CLI
Command Line Interface
واجهة سطر الأوامر التي تعمل عبر أداة php artisan لتوليد الملفات وإدارة التطبيق.
للمراجعة
03 HTTP HTTP
Hypertext Transfer Protocol
بروتوكول نقل النص الفائق الذي ينظم طلبات المتصفح واستجابات خادم Laravel.
للمراجعة
04 PSR PSR
PHP Standards Recommendations
المعايير القياسية للغة PHP مثل التحميل التلقائي PSR-4 التي يلتزم بها إطار العمل Laravel.
للمراجعة

اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.

من الفهم للتطبيق

مهامك قبل الاختبار

خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.

0/2مهام منجزة
  1. اكتب ونفّذ المثال البرمجي المشروح في قسم «تحويل الأنواع عبر دالة Casts» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

  2. بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «المسترجعات والمعدلات عبر Attribute» وقارن مخرجات التنفيذ.

تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.

مساحة التحدي

اختبر فهمك.
ووصلها للإتقان.

كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.

8أسئلة 3أنواع تحديات 100%هدف الإتقان
تصحيح تلقائي. فرص بلا حدود.

أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.

الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.

لمحة عن التحدي8 أسئلة تنتظرك
01

ما الهدف الهندسي الأساسي من تحويل الأنواع عبر دالة Casts في إطار العمل Laravel 12؟

يسهم تحويل الأنواع عبر دالة Casts في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.

02

يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «المسترجعات والمعدلات عبر Attribute» على رفع جودة الكود وسهولة اختباره آلياً.

صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.

03

أي آلية في Laravel 12 تتولى إدارة نطاقات الاستعلام المحلية Scopes بشكل مباشر ومنظم؟

توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة نطاقات الاستعلام المحلية Scopes.

04

لماذا يُعد تطبيق إنشاء مصانع النماذج Factories مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟

لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.

05

في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.

خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.

06

ما المزايا الهندسية التي يحققها تطبيق حالات المصانع وتوليد السجلات في Laravel 12؟ (اختر كل ما ينطبق)

يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.

07

يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.

صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.

08

ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص التحويلات ومصانع النماذج؟

يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.