ببعض الأحيان نحتاج لإدخال بيانات موجودة لدينا على شكل csv، في إطار العمل لارافيل يعتبر ذلك سهل جداً، حيث يجب علينا إنشاء seeder وبداخل الـ seeder يتم تحديد مسار الملف وعمل loop على البيانات.
في هذه الشرح سيتم إستيراد بيانات الدول (مفتاح الدولة، الدولة، المفتاح).
php artisan make:model Country -m
public function up() { Schema::create('countries', function (Blueprint $table) { $table->id(); $table->string('key_name'); $table->string('name'); $table->string('code'); $table->timestamps(); }); }
php artisan migrate
php artisan make:seeder CountrySeeder
بداخل الكلاس CountrySeeder نقوم بتعريف رابط الملف وعمل loop على البيانات التي بداخل الملف
public function run() { $csvFile = fopen(public_path("countries.csv"), "r"); $notFirstLine = false; while (($data = fgetcsv($csvFile, 2000, ",")) !== FALSE) { if ($notFirstLine) { Country::create([ "key_name" => $data['1'], "name" => $data['2'], "code" => $data['3'] ]); } $notFirstLine = true; } fclose($csvFile); }
توضيح
لقد تم تحديد مسار الملف countries.csv حيث تم وضعة داخل المجلد public.
نقوم برفع الملف ووضعة في المجلد public وذلك، لأننا قمنا بتحديد ذلك في مسار seed
لتحميل ملف الدول مع المقدمة من هنا
تنفيذ الأمر
php artisan db:seed --class=CountrySeeder
لإدخال البيانات من ملف JSON يجب إتباع نفس الخطوات السابقة من حيث إنشاء Migration, Model, Seeder لكن ما يختلف هو محتويات ملف seeder
class CountrySeeder extends Seeder { /** * Run the database seeds. * * @return void */ public function run() { $json = File::get(public_path("countries.json")); $countries = json_decode($json); foreach ($countries->countries as $key => $value) { Country::create([ "key_name" => $value->key_name, "name" => $value->name, "code" => $value->code ]); } } }
توضيح
تنفيذ الأمر
php artisan db:seed --class=CountrySeeder
لتحميل ملف الدول على هيئة json من هنا
مقالة مفيدة ... شكراً لك
علي حسن
عظيم ياهندسه جزاك الله كل خير