لارافيل, Others / 2024-11-21

عمل Seeding للبيانات من ملفات json , csv في لارافيل

عمل Seeding للبيانات من ملفات json , csv في لارافيل

2024-11-21 وقت القراءه : 2 دقائق

ببعض الأحيان نحتاج لإدخال بيانات موجودة لدينا على شكل csv، في إطار العمل لارافيل يعتبر ذلك سهل جداً، حيث يجب علينا إنشاء seeder وبداخل الـ seeder يتم تحديد مسار الملف وعمل loop على البيانات.

في هذه الشرح سيتم إستيراد بيانات الدول (مفتاح الدولة، الدولة، المفتاح).


خطوات إدخال البيانات من ملف CSV File.


إنشاء model وملف migration

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    


إنشاء seeder

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);
}

توضيح

  • استخدام الدالة fopen لفتح الملف countries.csv مع تحدد المسار، حيث تم وضعه في المجلد public، وإعطاءه الخاصية read.
  • تعريف متغير (notFirstLine) وإعطاءه قيمة false، حتى لا يتم قراءه الهيدرز.
  • عمل loop على ملف csf حيث تم إستخدام fgetcsv، ومن ثم يتم قراءة المتغير notFirstLine اذا كانت قيمته true أن يتم إدخال البيانات من خلال الدالة create.


لقد تم تحديد مسار الملف countries.csv حيث تم وضعة داخل المجلد public.


نقوم برفع الملف ووضعة في المجلد public وذلك، لأننا قمنا بتحديد ذلك في مسار seed


لتحميل ملف الدول مع المقدمة من هنا


تنفيذ الأمر

 php artisan db:seed --class=CountrySeeder   



إدخال البيانات من ملف JSON

لإدخال البيانات من ملف 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
            ]);
        }
    }
}

توضيح

  • رفع الملف countries.json بداخل المجلد public.
  • إستخدام الدالة File:get لجلب الملف حيث تم تحديد المسار من خلال دالة public_path ثم إسم الملف.
  • تم عمل json_decode لمحتويات الملف.
  • دالة foreach للبيانات الموجوده بداخل الملف وإستخدام الدالة create لإدخال البيانات.


تنفيذ الأمر

php artisan db:seed --class=CountrySeeder

لتحميل ملف الدول على هيئة json من هنا




التعليقات
علي حسن
منذ 3 سنوات

عظيم ياهندسه جزاك الله كل خير

زائر
منذ سنة

مقالة مفيدة ... شكراً لك

إضافة تعليق
Loading...