السلام عليكم ورحمة الله وبركاته

تم تجزئة التدوينات من اجل الوضوح وعدم التشتت في التسلسل في الاكواد .

اذا كنت متابع للتدوينة السابقة فبالتأكيد انك جاهز للدخول والبدء في عملية توليد البيانات عشوائياً

اذا طبيت فجأة على هذه التدوينة 🙁 انصحك بالانتقال الى هذا الرابط

http://wp.me/p8ljSC-5C

والرجوع بعده الى هنا

نبدأ على بركة الله

Factory

مبدأ بسيط بحيث يمكن ننشأ factory مستقل لكل جدول في قاعدة البيانات او لأي مصدر بيانات بدون التخزين في قاعدة البيانات ، بحيث يسهل عليك الحصول على بيانات عشوائية بالصيغة والترتيب التي تناسبك .

سوف يتم التعامل مع مكتبة Faker لتوليد البيانات العشوائية

للمزيد من التفاصيل عنها https://github.com/fzaninotto/Faker

راح ننشأ factory

  1. المنتجات
  2. المراجعات
  3. المستخدمين — موجود مسبقا لا نحتاج لانشائه من جديد

نكتب هذا الأمر في شاشة الاوامر terminal

 

الان تم انشاء ملفين داخل مجلد database -> factories

نبدأ تعديلها واحدا تلو الاخر

ProductFactory.php

 

 

اللي سويناه في هذا الكود

عرفنا factory جديد مرتبط بالمودل تبع المنتج بحيث عند استدعاء الفاكتوري الخاص بالمنتج  يتم تنفيذ function

تقوم بعملية التوليد للداتا وترجع array من البيانات العشوائية الى المصدر الذي استدعى هذا الفاكتوري.

داخل هذا function أنشأنا اوبجكت من كلاس Faker بحيث هو يتولى توليد البيانات ،

ونحن نحدد نوع البيانات  المراد توليدها  والحقول المراد ملئها بالبيانات .

لو لاحظنا اننا لم نحدد كل الحقول لان بعضها سوف يتم تعبئتها تلقائيا من قاعدة البيانات بمعنى اخر لديها قيم افتراضية .

لحظة لحظة ؟ ماذا عن رقم معرف المستخدم الذي أنشأ هذا المنتج ؟

لا تقلق ، لارافيل يتكفل بالموضوع ويتم تمريره تلقائيا بواسطة العلاقات بين  Models .

حاب تجرب تنفيذ واختبار factory تبع المنتج الذي انشأناه مؤخرا ؟

 

 

راح يطلع خطأ في عملية ادخال البيانات الى قاعدة البيانات بحيث تتطلب معرف المستخدم والفاكتوري ما اعطى قيمة لمعرف المستخدم .

General error: 1364 Field ‘user_id’ doesn’t have a default value

اما اذا طلع لديك خطأ بعنوان

Base table or view not found: 1146 Table ..etc

هذا يعني انه لم يجد الجدول في قاعدة البيانات ، بطريقة مثالنا نحن انشأنا جدول product

ولارافيل تضيف حرف s للجدول وهو يحاول ادخال بياناتنا الى جدول products وبالتالي لن يجده ويرجع لنا الخطأ

الحل :

في كلاس Product.php

نضع اسم الجدول ليتخذه لارافيل ويعتمده في ادخال البيانات

 

 

حاول مرة اخرى ، راح يختفي هذا الخطأ ويطلع لنا الخطأ الخاص بمعرف المستخدم .. كذا ماشين صح .

ReviewFactory.php

الان راح ننتقل لعمل factory وتوليد بيانات المراجعات او التقييم .

 

 

لو لاحظنا اننا فقط نستخدم الفاكتوري لتوليد نص المراجعة ، اما باقي خانات الجدول ففيها قيم افتراضية وراح يتم انشاءها بواسطة قاعدة البيانات هي المسؤولة ،،

الا كما ذكرنا ان المراجعة يكتبها مستخدم ونحتاج رقم المعرف الخاص به ،

وتكون مراجعة او تقييم لمنتج محدد وبذلك نحتاج رقم المعرف الخاص بالمنتج .

وهذا راح يتم عملها وتوليدها بواسطة استخدامنا Seeding

Database Seeding

بكل اختصار Seeding هي المسؤولة عن التخزين وتوصيل البيانات التي ننشأها من factories الى قاعدة البيانات  عن طريق كلاسات مخصصة لذلك seeding classes .

في ملجد database راح نحصل factories – migration – seeds

جميعها انتهينا منها — ما عدا seeds

يوجد بداخله ملف افتراضي عام DatabaseSeeder.php

يمكننا من خلال تنفيذ seeder الخاص بنا . راح توضح بالخطوات القليلة القادمة

راح ننشأ Seeder خاص بنا

 

بعد تنفيذ هذا الامر سوف يتم انشاء ملف باسم UserTableSeeder خاص بنا وباللوجيك الخاص بنا والذي نريده في كيفية انشاء البيانات العشوائية .

ما هو السيناريو الذي نريده ؟

اممم ،

محتاج انشئ ٥ مستخدمين ولكل مستخدم يضيف ٣ منتجات ولكل منتج لديه ٣ مراجعات وتقييمات. 

داخل function run نلصق هذا الكود

الان نستطيع تنفيذه مباشرة عن طريق  هذا الامر

 

 

 

 

ماذا لو لدينا اكثر من ملف نريد تنفيذه

الطريقة كالاتي :

نفتح ملف DatabaseSeeder.php  وبداخل function run

نستدعي seeders الخاصة بنا عن طريق تمريرها كمصفوفة Array اذا كانت اكثر من واحد ،

الان لدينا seeder وحيد لذا نستدعيه كالتالي :

 

 

لتنفيذ كود التوليد الخاص بنا ، نكتب هذا الأمر

 

بعد تنفيذ هذا الامر راح يتم توليد البيانات العشوائية وتخزينها في قاعدة البيانات

الى هنا انتهى مثالنا وآتمنى اني وفقت في ايصال المفهوم والفكرة للجميع .