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

تعديل البيانات والمعاملات الذرية وبذر القواعد عبر SeedersQuery Builder Mutations Transactions and Database Seeders

إدراج وتحديث وحذف السجلات وتنفيذ المعاملات الذرية DB::transaction وتعبئة البيانات الأولية عبر فئات Seeders.
أقسام الدرس
6
الأمثلة
6
اللغة
العربية
تاريخ النشر
غير محدد
المشاهدات
0
محتوى الدرس
في هذا الدرس 6تصفّح المواضيع

تقبل دالة insert في باني الاستعلامات مصفوفة ترابطية لإدراج سجل واحد أو مصفوفة من المصفوفات لإدراج مئات السجلات دفعة واحدة في جملة SQL واحدة. وعندما تحتاج للحصول فوراً على رقم المعرف التلقائي للسجل المضاف، استدعِ دالة insertGetId.

  • الإدراج الفردي والجماعي (insert): إضافة صف واحد أو دفعة صفوف في استعلام واحد وإرجاع قيمة منطقية.
  • استرجاع المعرف (insertGetId): إدراج سجل جديد وإرجاع رقم المعرف الأساسي المتزايد الذي ولدته القاعدة.
  • الطوابع الزمنية: لا يملأ Query Builder حقول التاريخ تلقائياً عند الإدراج، لذا تمرر الدالة now صراحةً.
مخطط معماري يوضح تعديل البيانات والمعاملات الذرية وبذر القواعد عبر Seeders في إطار العمل Laravel 12
PHP
$orderId = DB::table('orders')->insertGetId([
    'user_id'    => 1,
    'total'      => 240.00,
    'created_at' => now(),
]);

اربط شروط التصفية where قبل استدعاء دالة update لتعديل صفوف محددة والحصول على عدد السجلات المتأثرة. ولزيادة العدادات بأمان دون تضارب، استخدم دالتي increment و decrement، أو استخدم دالة upsert لإدراج الصفوف الجديدة وتحديث الموجودة في عملية واحدة.

  • تحديث الصفوف (update): تعديل قيم الأعمدة للسجلات المطابقة للشرط وإرجاع عدد الصفوف المعدلة.
  • الدمج الذكي (upsert): إضافة السجلات غير الموجودة وتحديث السجلات المتطابقة في المفتاح الفريد باستعلام واحد.
  • العدادات الذرية (increment & decrement): زيادة أو إنقاص القيم الرقمية داخل القاعدة مباشرة لمنع تضارب الطلبات المتزامنة.
PHP
DB::table('products')->where('id', 5)
    ->increment('stock', 10);

DB::table('inventory')->upsert(
    [['sku' => 'KB-01', 'qty' => 25]],
    ['sku'],
    ['qty']
);

عندما تتطلب العملية تعديل عدة جداول معاً كخصم رصيد المحفظة وتسجيل عملية الدفع، فإن فشل الخطوة الثانية يترك البيانات مشوهة. يضمن تغليف الاستعلامات المترابطة داخل DB::transaction الذرية الكاملة؛ فإما أن تنجح كافة الخطوات وتُعتمد، أو يتم التراجع عنها جميعاً تلقائياً عند حدوث أي خطأ.

  • الحذف المشروط (delete): حذف السجلات المطابقة لشرط التصفية وإرجاع عدد الصفوف المحذوفة.
  • المعاملة الذرية (DB::transaction): فتح معاملة قاعدة بيانات وتنفيذ الكود ثم اعتماد التغييرات COMMIT تلقائياً.
  • التراجع التلقائي (Auto Rollback): إلغاء كافة التغييرات السابقة تلقائياً فور انطلاق أي استثناء داخل الدالة المغلقة.
PHP
DB::transaction(function () {
    DB::table('wallets')->where('user_id', 1)
        ->decrement('balance', 100);
    DB::table('payments')->insert([
        'user_id' => 1, 'amount' => 100,
    ]);
});

تكون الجداول فارغة تماماً بعد تشغيل التهجيرات، وتحتاج إلى بيانات أولية أساسية مثل الدول أو الصلاحيات أو الأقسام الافتراضية. تقع فئات البذر Seeders داخل مجلد database/seeders وتغلف كود تعبئة البيانات القابل للتكرار داخل دالة run.

  • توليد الفئة (make:seeder): إنشاء كلاس بذر جديد داخل مجلد database/seeders بأمر Artisan.
  • دالة التنفيذ (run): الدالة المركزية التي تكتب بداخلها أوامر إدراج أو دمج البيانات الأولية.
  • البذر القابل للتكرار (Idempotent Seeding): يفضل استخدام upsert داخل فئات البذر لمنع أخطاء التكرار عند إعادة تشغيلها.
PHP
class RoleSeeder extends Seeder {
    public function run(): void {
        DB::table('roles')->upsert(
            [['slug' => 'admin', 'name' => 'Admin']],
            ['slug'], ['name']
        );
    }
}

بدلاً من تشغيل كل فئة بذر يدوياً على حدة، يمكنك ترتيب استدعائها وفق تسلسل اعتماديتها داخل الكلاس الرئيسي DatabaseSeeder عبر دالة call. بعدها يمكنك ملء القاعدة بالكامل بالأمر db:seed أو إعادة بناء الجداول وبذرها بخطوة واحدة عبر migrate:fresh --seed.

  • استدعاء الفئات ($this->call): تنظيم تشغيل مصفوفة من فئات البذر الفرعية بترتيب يراعي الجداول الأساسية أولاً.
  • تشغيل البذر (db:seed): تنفيذ الكلاس الرئيسي افتراضياً أو تشغيل كلاس محدد عبر الخيار --class.
  • التصفير والبذر (migrate:fresh --seed): إعادة بناء كافة الجداول وتعبئتها بالبيانات الأولية بأمر تطوير واحد.
PHP
class DatabaseSeeder extends Seeder {
    public function run(): void {
        $this->call([
            RoleSeeder::class,
            CategorySeeder::class,
        ]);
    }
}

يضمن الجمع بين المعاملات الذرية ودالة الدمج الآمنة upsert وفئات البذر المنظمة سلامة عمليات الكتابة وتجهيز البيانات في كافة البيئات. راجع هذا الملخص لاختيار دالة التعديل وأمر البذر المناسب لسيناريو عملك.

وجه المقارنة الهندسيالأسلوب اليدوي أو غير المحميمعيار Laravel 12 الحديث
تحديث العداداتقراءة الرقم في PHP ثم زيادته وحفظه مما يسبب تضارباًزيادة أو إنقاص ذري مباشر داخل القاعدة عبر increment و decrement
مزامنة السجلاتتنفيذ استعلام بحث أولاً ثم التفرع للإدراج أو التحديثعملية دمج ذرية واحدة عبر الدالة upsert
أمان العمليات المركبةاستعلامات متفرقة تترك بيانات مشوهة عند فشل إحداهاتغليف داخل DB::transaction يتراجع تلقائياً عند أي خطأ
تعبئة البيانات الأوليةاستيراد ملفات نصية يدوياً لتجهيز الجداول الأساسيةفئات Seeder برمجية منظمة تُشغل عبر أمر db:seed
PHP
# Run all seeders or target a specific seeder class
php artisan db:seed
php artisan db:seed --class=RoleSeeder
php artisan migrate:fresh --seed
خلاصة المعرفة ومحطة الانتقال

ملخص الدرس

حصاد الدرس

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

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

أتقنت في هذا الدرس حول «تعديل البيانات والمعاملات الذرية وبذر القواعد عبر Seeders» مفاهيم إدراج السجلات واسترجاع رقم المعرف، وتحديث السجلات والدمج الذكي والعدادات، وحذف السجلات وتنفيذ المعاملات الذرية وفق معايير Laravel 12 الحديثة.

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

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

مشاركة

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

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

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

المصطلحات4

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

0 / 4 مفهومةأول بطاقة، أول خطوة
01 Database Seeders بذر البيانات
إدراج وتحديث وحذف السجلات وتنفيذ المعاملات الذرية DB::transaction وتعبئة البيانات الأولية عبر فئات Seeders.
للمراجعة
02 Inserting Rows and Retrieving IDs إدراج السجلات واسترجاع رقم المعرف
المفهوم الهندسي والتطبيق العملي المباشر لقسم إدراج السجلات واسترجاع رقم المعرف في إطار العمل Laravel 12.
للمراجعة
03 Updating Upserting and Incrementing تحديث السجلات والدمج الذكي والعدادات
المفهوم الهندسي والتطبيق العملي المباشر لقسم تحديث السجلات والدمج الذكي والعدادات في إطار العمل Laravel 12.
للمراجعة
04 Deleting Rows and Atomic Transactions حذف السجلات وتنفيذ المعاملات الذرية
المفهوم الهندسي والتطبيق العملي المباشر لقسم حذف السجلات وتنفيذ المعاملات الذرية في إطار العمل 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. اكتب ونفّذ المثال البرمجي المشروح في قسم «إدراج السجلات واسترجاع رقم المعرف» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.

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

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

مساحة التحدي

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

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

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

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

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

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

ما الهدف الهندسي الأساسي من إدراج السجلات واسترجاع رقم المعرف في إطار العمل Laravel 12؟

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

02

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

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

03

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

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

04

لماذا يُعد تطبيق إنشاء وكتابة فئات بذر البيانات مهماً عند بناء تطبيقات 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 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.