في هذا الدرس 6تصفّح المواضيع
تقبل دالة insert في باني الاستعلامات مصفوفة ترابطية لإدراج سجل واحد أو مصفوفة من المصفوفات لإدراج مئات السجلات دفعة واحدة في جملة SQL واحدة. وعندما تحتاج للحصول فوراً على رقم المعرف التلقائي للسجل المضاف، استدعِ دالة insertGetId.
- الإدراج الفردي والجماعي (insert): إضافة صف واحد أو دفعة صفوف في استعلام واحد وإرجاع قيمة منطقية.
- استرجاع المعرف (insertGetId): إدراج سجل جديد وإرجاع رقم المعرف الأساسي المتزايد الذي ولدته القاعدة.
- الطوابع الزمنية: لا يملأ Query Builder حقول التاريخ تلقائياً عند الإدراج، لذا تمرر الدالة now صراحةً.
$orderId = DB::table('orders')->insertGetId([
'user_id' => 1,
'total' => 240.00,
'created_at' => now(),
]);
اربط شروط التصفية where قبل استدعاء دالة update لتعديل صفوف محددة والحصول على عدد السجلات المتأثرة. ولزيادة العدادات بأمان دون تضارب، استخدم دالتي increment و decrement، أو استخدم دالة upsert لإدراج الصفوف الجديدة وتحديث الموجودة في عملية واحدة.
- تحديث الصفوف (update): تعديل قيم الأعمدة للسجلات المطابقة للشرط وإرجاع عدد الصفوف المعدلة.
- الدمج الذكي (upsert): إضافة السجلات غير الموجودة وتحديث السجلات المتطابقة في المفتاح الفريد باستعلام واحد.
- العدادات الذرية (increment & decrement): زيادة أو إنقاص القيم الرقمية داخل القاعدة مباشرة لمنع تضارب الطلبات المتزامنة.
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): إلغاء كافة التغييرات السابقة تلقائياً فور انطلاق أي استثناء داخل الدالة المغلقة.
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 داخل فئات البذر لمنع أخطاء التكرار عند إعادة تشغيلها.
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): إعادة بناء كافة الجداول وتعبئتها بالبيانات الأولية بأمر تطوير واحد.
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 |
# 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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
راجع المعنى، اشرحه لنفسك، ثم علّم البطاقة كمفهومة.
- 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.
- للمراجعة
لا توجد بطاقات تطابق البحث والتصفية.
اقرأ البطاقات بحرية. سجّل الدخول لحفظ تقدم مراجعتك.
مهامك قبل الاختبار
خطوة صغيرة كل مرة. وإنجاز تقدر ترجع له.
-
اكتب ونفّذ المثال البرمجي المشروح في قسم «إدراج السجلات واسترجاع رقم المعرف» داخل مشروع Laravel 12 المحلي وتحقق من النتيجة.
-
بدّل بين الحالات الثلاث في المحاكي التفاعلي ضمن قسم «تحديث السجلات والدمج الذكي والعدادات» وقارن مخرجات التنفيذ.
تأشير المهمة إقرار منك بإتمامها، وليس تصحيحًا آليًا للكود. يُحفظ تقدمك في حسابك.
اختبر فهمك.
ووصلها للإتقان.
كل سؤال خطوة لقدّام. اختار، اكتب كود، وشوف نتيجتك فورًا.
أكمل المهام، واجمع كل الإجابات الصحيحة. أقل من 100%؟ راجع وأعد المحاولة.
الأسئلة متاحة للاطلاع. سجّل الدخول للتفاعل وحفظ تقدمك.
لمحة عن التحدي8 أسئلة تنتظرك +
ما الهدف الهندسي الأساسي من إدراج السجلات واسترجاع رقم المعرف في إطار العمل Laravel 12؟
يسهم إدراج السجلات واسترجاع رقم المعرف في تنظيم منطق التطبيق بأسلوب معياري آمن وقابل للصيانة في Laravel 12.
يساعد الالتزام باصطلاحات Laravel 12 الرسمية في قسم «تحديث السجلات والدمج الذكي والعدادات» على رفع جودة الكود وسهولة اختباره آلياً.
صواب؛ الالتزام بالمعايير القياسية في Laravel 12 يجعل الكود واضحاً وسهل الفحص والصيانة.
أي آلية في Laravel 12 تتولى إدارة حذف السجلات وتنفيذ المعاملات الذرية بشكل مباشر ومنظم؟
توفر طبقة إطار العمل وحاوية الخدمات في Laravel 12 الأدوات القياسية لإدارة حذف السجلات وتنفيذ المعاملات الذرية.
لماذا يُعد تطبيق إنشاء وكتابة فئات بذر البيانات مهماً عند بناء تطبيقات Laravel 12 جاهزة للإنتاج؟
لأنه يمنع الأخطاء البرمجية الخفية ويوحد سلوك التطبيق بين بيئتي التطوير والإنتاج.
في Laravel 12، يُنصح بكتابة مفاتيح الإنتاج السرية مباشرة داخل ملفات الكود المصدري المرفوعة إلى Git بدلاً من ملفات البيئة.
خطأ؛ يجب حفظ المفاتيح والبيانات السرية في متغيرات البيئة وعدم رفعها أبداً إلى مستودع Git.
ما المزايا الهندسية التي يحققها تطبيق تنظيم وتشغيل فئات بذر البيانات في Laravel 12؟ (اختر كل ما ينطبق)
يوفر فصلاً واضحاً للمسؤوليات، وأماناً أعلى أثناء التنفيذ، وتعاوناً أسهل بين أفراد الفريق.
يوظف إطار العمل Laravel 12 ميزات PHP 8 الحديثة مثل تحديد أنواع القيم المرجعة لجعل الكود أكثر وضوحاً وأماناً.
صواب؛ يعتمد Laravel 12 بشكل كامل على الصياغة الحديثة للغة PHP 8.2+ وسلامة الأنواع.
ما الفرق الجوهري بين معيار Laravel 12 الحديث والملفات اليدوية التقليدية في ملخص تعديل البيانات وبذر القواعد؟
يوفر Laravel 12 واجهات قياسية موحدة وحماية مدمجة تغني عن الكود اليدوي المعرض للأخطاء.