"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيفية إنشاء البيانات بسهولة باستخدام Database Seeders في Laravel

كيفية إنشاء البيانات بسهولة باستخدام Database Seeders في Laravel

تم النشر بتاريخ 2024-07-31
تصفح:812

How to easily generate data with Database Seeders in Laravel

عند إنشاء تطبيق، سواء كان صغيرًا أو متوسطًا أو كبيرًا. إن وجود بيانات اختبارية للتلاعب بها في التطبيق أمر لا مفر منه ومهم.

لذلك دعونا نبدأ من البسيط إلى المتقدم بسيناريوهين مختلفين.

أنا. يجب أن يكون لجميع التطبيقات أو غالبية التطبيقات مستخدمين. في بعض الأحيان، نرغب في تصنيف/وضع علامة على المستخدمين كـ مسؤول أو مستخدمين عاديين. لذلك دعونا ننشئ أداة بذارة بسيطة تضم 100 مستخدم بمواصفات الجدول المدرجة أدناه:

  • الهوية، الاسم الأول، اسم العائلة، البريد الإلكتروني، كلمة المرور
  • نوع المستخدم: إما مسؤول أو مستخدم عادي

حسنا هيا بنا.

للدخول إلى جدول users، بالطبع، سيكون لديك جدول ترحيل المستخدمين الافتراضي الذي تم إنشاؤه لك بواسطة Laravel.

لذلك من أجل هذا العرض التوضيحي، يجب أن يبدو ترحيل الجدول الخاص بك كما يلي:

public function up()
    {
        Schema::create('users', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->string('password');
            $table->enum('user_type', ['user','admin'])->default('user');
            $table->rememberToken();
            $table->timestamps();
        });
    }

لإنشاء فئة بذرة لجدول المستخدمين لدينا.

php artisan make:seeder UserSeeder

لذلك، لإنشاء قيم للبذارة التي أنشأناها للتو، نحتاج إلى استخدام حزمة Faker الافتراضية التي تأتي مع كل تطبيق Laravel.

لإنشاء 100 مستخدم مرة واحدة، نقوم أولاً بإجراء حلقة for ونمرر البيانات الزائفة/الزائفة إلى كل عمود مثل هذا:

use Faker\Factory as Faker;

public function run()
{
   $faker = Faker::create();

   for(i = 0; i  $faker->firstName(),
        'last_name' => $faker->lastName(),
        'email' => $faker->email(),
        'password' => bcrypt('hello1234'), // we might want to set this to a value we can easily remember for testing sake
        'user_type' => $faker->randomElement(['admin', 'user'])
      ]);
   }
}

لزرع هذا في قاعدة البيانات، نحتاج إلى تشغيل الأمر أدناه:

php artisan db:seed --class=UserSeeder

سيؤدي ذلك إلى إنشاء 100 مستخدم وإدراجهم في قاعدة البيانات.

الأمر بهذه البساطة.

الآن، إلى حل أكثر تقدمًا.

نحتاج إلى إنشاء:

  • جدول أقسام يضم 10 أقسام جديدة.
  • سنقوم بإنشاء 100 مستخدم جديد.
  • جدول الموظفين الذي سيشير إلى جدول المستخدمين بنفس التفاصيل وعمود إضافي للإشارة إلى جدول الأقسام، أي Department_id.

نحن نعلم بالفعل كيف سيبدو جدول المستخدمين، فلننظر إلى الشكل الذي سيبدو عليه جدول الموظفين والقسم.

جدول الموظفين

Schema::create('staff', function (Blueprint $table) {
            $table->id();
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email');
            $table->foreignId('department_id')->references('id')->on('departments');
            $table->foreignId('user_id')->references('id')->on('users');
            $table->timestamps();
        });

جدول الأقسام:

Schema::create('departments', function (Blueprint $table) {
            $table->id();
            $table->string('name');
            $table->timestamps();
        });

لذلك نحن بحاجة إلى تشغيل الترحيل للحصول على هذه الجداول في قاعدة بياناتنا.

الآن، بالنسبة لفئة UserSeeder، يتعين علينا تنفيذ النقاط المذكورة سابقًا.

  • جدول أقسام يضم 10 أقسام جديدة.
$now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

يجب تنفيذ النقطتين الأخيرتين معًا

  • سنقوم بإنشاء 100 مستخدم جديد
  • جدول الموظفين الذي سيشير إلى جدول جدول المستخدمين بنفس التفاصيل وعمود إضافي للإشارة إلى جدول الأقسام أي Department_id.
if ($count == 10) { // we need to make sure we have all 10 departments
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
}

توضيح:

  • قمنا بإنشاء 10 أقسام أولاً.

  • ثم قمنا بإعداد عداد للتحقق مما إذا تم إنشاء جميع الأقسام العشرة.

  • إذا كان شرط العداد صحيحًا، فإننا نقوم بإنشاء 100 مستخدم.

  • لكل من هؤلاء المستخدمين المائة، نحتاج إلى الإشارة إلى التفاصيل الخاصة بهم في جدول آخر يسمى جدول الموظفين.

  • يجب أن ينتمي كل موظف إلى مستخدم ويجب أن ينتمي أيضًا إلى قسم ما، لذلك للقيام بذلك، نحتاج إلى الحصول على جميع الأقسام التي أنشأناها سابقًا وإدخالها في عمود Department_id بشكل عشوائي.

التطبيق الكامل لـ UserSeeder

        $now = now();
        $count = 0;
        $departmentNames = ['Electronics', 'Home & Garden', 'Toys & Games', 'Health & Beauty', 'Automotive', 'Sports & Outdoors','Clothing & Accessories',
            'Books', 'Music', 'Movies & TV', 'Grocery'
        ];

        for ($j=0; $j  $departmentNames[$j],
                'created_at' => $now,
                'updated_at' => $now,
            ]);
            $count  ;
        }

        $faker = Faker::create();
        if ($count == 10) {
            $departments = Department::pluck('id')->toArray();

            for ($i=0; $i  $faker->firstName(),
                    'last_name' => $faker->lastName(),
                    'email' => $faker->email(),
                    'password' => bcrypt('hello1234'),
                    'user_type' => $faker->randomElement(['admin', 'user']),
                    'created_at' => $now,
                    'updated_at' => $now
                ]);

                Staff::create([
                    'first_name' => $user->first_name,
                    'last_name' => $user->last_name,
                    'email' => $user->email,
                    'user_id' => $user->id,
                    'department_id' => $faker->randomElement($departments), // pick random departments from DB
                    'created_at' => $now,
                    'updated_at' => $now
                ]);
            }
        }

ثم اركض:

php artisan make:seeder --class=UserSeeder

إذا كانت لديك أسئلة، فلا تتردد في تركها. برمجة سعيدة!

بيان الافراج تم إعادة نشر هذه المقالة على: https://dev.to/adetolaaremu/how-to-easily-generate-data-with-database-seeders-in-laravel-1kg6?1 إذا كان هناك أي انتهاك، يرجى الاتصال بـ Study_golang@163 .com لحذفه
أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3